Biz-Probleme - Enter/Exit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Es gibt Neuigkeiten! Ab sofort könnt ihr dem Donators Club auf Lebenszeit beitreten.
Weitere Infos im Thema Donator's Club ab heute wieder verfügbar!

  • Biz-Probleme - Enter/Exit

    Hey,
    Ich habe ein Problem, (damals Hilfe von SnoX bekommen hierbei)

    Also so sieht es bei normalen Objekten aus, wenn ich ein Interior betrete.

    Quellcode

    1. enum buildungs{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Float:EX,Float:EY,Float:EZ,// Enter Position
    6. Float:IX,Float:IY,Float:IZ,// Exit Position
    7. }
    8. static const Building[][buildungs]={
    9. {"Stadthalle",3,0,/*Eingang*/1480.9742,-1783.3358,14.7578,/*Ausgang*/390.2214,173.8667,1008.3828},
    10. {"LSPD",6,0,/*Eingang*/1554.7063,-1675.6072,16.1953,/*Ausgang*/246.783996,63.900199,1003.640625},
    11. {"Fahrschule",3,0,/*Eingang*/1154.0405,-1772.3998,16.5992,/*Ausgang*/-2029.6615,-119.4395,1035.1719}
    12. };
    Alles anzeigen


    So sieht es beim Biz aus

    Quellcode

    1. num bizinteriors{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Biztype,
    6. Float:IX,Float:IY,Float:IZ,// Exit Position
    7. }
    8. static const BizInts[][bizinteriors]={
    9. {"Dummy",0,0,0,0.0,0.0,0.0},
    10. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    11. };
    Alles anzeigen

    Quellcode

    1. if(GetPVarInt(playerid,"InBiz")!=-1)
    2. {
    3. new b=GetPVarInt(playerid,"InBiz");
    4. new bi=bInfo[b][bInterior];
    5. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    6. {
    7. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    8. SetPlayerInterior(playerid,0);
    9. SetPlayerVirtualWorld(playerid,0);
    10. SetPVarInt(playerid,"InBiz",-1);
    11. return 1;
    12. }
    13. }
    14. else
    15. {
    16. for(new b;b<MAX_BIZ;b++)
    17. {
    18. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    19. {
    20. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    21. new bi=bInfo[b][bInterior];
    22. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    23. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    24. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    25. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    26. SetPVarInt(playerid,"InBiz",b);
    27. return 1;
    28. }
    29. }
    30. }
    31. }
    Alles anzeigen
    Irgendwie komme ich nicht in das Interior rein, ich drücke "Enter" nichts passiert. Bin gerade dabei alle Biz Geschäfte aufzustellen usw.
    Ich hoffe jemand kann mir da helfen

    Aufgrund meines Ausbildungsplatzes war ich inaktiv ab Weihnachten bin ich wieder richtig aktiv :)

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • Ja wird gesetzt, ich habe neue Informationen.

    Das zeigt er mir an, wenn ich versuche, in den 24/7 rein zu gehen.
    prntscr.com/lvdegu

    PAWN-Quellcode

    1. enum bizinteriors{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Biztype,
    6. Float:IX,Float:IY,Float:IZ,// Exit Position
    7. }
    8. static const BizInts[][bizinteriors]={
    9. {"Dummy",0,0,0,0.0,0.0,0.0},
    10. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    11. };
    Alles anzeigen
    Wenn ich rein gehen will passiert das.


    PAWN-Quellcode

    1. if(GetPVarInt(playerid,"InBiz")!=-1)
    2. {
    3. new b=GetPVarInt(playerid,"InBiz");
    4. new bi=bInfo[b][bInterior];
    5. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    6. {
    7. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    8. SetPlayerInterior(playerid,0);
    9. SetPlayerVirtualWorld(playerid,0);
    10. SetPVarInt(playerid,"InBiz",-1);
    11. return 1;
    12. }
    13. }
    Alles anzeigen
    (
  • BrightLeaN schrieb:

    Ja wird gesetzt, ich habe neue Informationen.

    Wenn ich rein gehen will passiert das.


    PAWN-Quellcode

    1. if(GetPVarInt(playerid,"InBiz")!=-1)
    2. {
    3. new b=GetPVarInt(playerid,"InBiz");
    4. new bi=bInfo[b][bInterior];
    5. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    6. {
    7. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    8. SetPlayerInterior(playerid,0);
    9. SetPlayerVirtualWorld(playerid,0);
    10. SetPVarInt(playerid,"InBiz",-1);
    11. return 1;
    12. }
    13. }
    Alles anzeigen
    (
    Das ist doch dafür, wenn du raus gehst siehe an Interior und SetVirtualWorld ?

    BrightLeaN schrieb:

    Hey,

    PAWN-Quellcode

    1. for(new b;b<MAX_BIZ;b++)
    2. {
    3. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    4. {
    5. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    6. new bi=bInfo[b][bInterior];
    7. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    8. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    9. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    10. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    11. SetPVarInt(playerid,"InBiz",b);
    12. return 1;
    13. }
    14. }
    Alles anzeigen
    Das ist doch für das reingehen oder?

    Dann alss dochmal printen,

    PAWN-Quellcode

    1. for(new b;b<MAX_BIZ;b++)
    2. {
    3. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    4. {
    5. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    6. new bi=bInfo[b][bInterior];
    7. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    8. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    9. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    10. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    11. SetPVarInt(playerid,"InBiz",b);
    12. new string[250];
    13. format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior])
    14. println(string);
    15. return 1;
    16. }
    17. }
    18. }
    Alles anzeigen

    dann zeig malw as erprintet
    MFG. Mogly1

    Du willst scripten Lernen hier...

    (Grundwissen)TuTorial
    (RP-Server)TuTorial

    (vom Register und Login bis zum eigenen Multichar-system)
  • Hab es mir printen lassen, es kommt nicht mal zum printen, dass heißt irgendwas muss mit dem PVar nicht stimmen oder?


    PAWN-Quellcode: OnPlayerConnect

    1. SetPVarInt(playerid,"InBiz",-1);

    Quellcode

    1. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    2. {
    3. // Biz
    4. if(GetPVarInt(playerid,"InBiz")!=-1)
    5. {
    6. new b=GetPVarInt(playerid,"InBiz");
    7. new bi=bInfo[b][bInterior];
    8. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    9. {
    10. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    11. SetPlayerInterior(playerid,0);
    12. SetPlayerVirtualWorld(playerid,0);
    13. SetPVarInt(playerid,"InBiz",-1);
    14. return 1;
    15. }
    16. }
    17. else
    18. {
    19. for(new b;b<MAX_BIZ;b++)
    20. {
    21. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    22. {
    23. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    24. new bi=bInfo[b][bInterior];
    25. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    26. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    27. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    28. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    29. SetPVarInt(playerid,"InBiz",b);
    30. new string[250];
    31. format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
    32. printf(string);
    33. return 1;
    34. }
    35. }
    36. }
    37. }
    38. return 1;
    39. }
    Alles anzeigen
    prntscr.com/lvovh7 <- Das kommt in die Konsole



    im Public ist noch das selbe für Öffentliche Gebäude aber daran liegt das bestimmt nicht.
  • MAX_BIZ stimmt nicht mit sizeof(BizInts) überein.

    Lösche am besten MAX_BIZ und verwende überall nur sizeof(BizInts) :)

    Spoiler anzeigen
    Der Fehler bedeutet:
    Du hast ein Array:

    new test[] = "Halt";

    [0] = 'H'
    [1] = 'a'
    [2] = 'l'
    [3] = 't'

    Versuchst du jetzt auf index 4 zuzugreifen, bekommst du einen Fehler, da dieser ja nicht zugänglich ist, obwohl die Variable 4 Einträge hat.
    Das liegt nun mal daran, dass der index bei 0 beginnt :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/

  • PAWN-Quellcode

    1. ocmd:mieten(playerid,params[])
    2. {
    3. for(new b;b<MAX_BIZ;b++)
    4. {
    5. if(bInfo[b][biztype]==3)// Fahrzeugverleih
    6. {
    7. if(IsPlayerInRangeOfPoint(playerid,5,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    8. {
    9. ShowPlayerDialog(playerid, DIALOG_FAHRZEUGVERLEIH1, DIALOG_STYLE_LIST, "Fahrzeugverleih", "Mountenbike - $394\nBmx - $326\nFahrrad - $316\nRoller - $693", "Mieten", "Abbrechen");
    10. return 1;
    11. }
    12. }
    13. }
    14. return SendClientMessage(playerid,-1,"{bc4343}Du kannst dir kein Fahrzeug mieten, da du an keinem Fahrzeugverleih stehst.");
    15. }
    Alles anzeigen


    PAWN-Quellcode

    1. stock IsAtBiz(playerid)
    2. {
    3. for(new b;b<MAX_BIZ;b++)
    4. {
    5. if(!IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ])) continue;
    6. return b;
    7. }
    8. return 0;
    9. }
    10. stock IsAtHisBiz(playerid)
    11. {
    12. for(new b;b<MAX_BIZ;b++)
    13. {
    14. if(bInfo[b][db_bid]!=pInfo[playerid][pBizbesitz]) continue;
    15. if(!IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ])) continue;
    16. return bInfo[b][db_bid];
    17. }
    18. return 0;
    19. }
    Alles anzeigen
    Wenigstens ist das Problem jetzt gefunden, ich brauche aber MAX_BIZ für die Sachen z.B
    Was soll ich jetzt machen ich kann da doch nicht sizeof(BizInts) hinschreiben.



    PAWN-Quellcode

    1. static const BizInts[][bizinteriors]={
    2. {"Dummy",0,0,0,0.0,0.0,0.0},
    3. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    4. };
    Ich habe extra die 0 nie besetzt weil es ja wie du es schon sagst zu Komplikationen führt.
  • BrightLeaN schrieb:

    Was soll ich jetzt machen ich kann da doch nicht sizeof(BizInts) hinschreiben.
    Doooch kannst du, du schaffst das :)

    Vertrau mir <3

    //Edit: bzw verwende mal überall sizeof(bInfo) Denn eigentlich greifst du ja überall darauf nur zu :D Wieso hast du so viele Variablen?!?! Eigentlich reicht eine :D

    BrightLeaN schrieb:

    Ich habe extra die 0 nie besetzt weil es ja wie du es schon sagst zu Komplikationen führt.
    Doch kannst du, wenn du überall das sizeof verwendest, kommt es zu keinen Komplikationen.


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • PAWN-Quellcode

    1. new bInfo[MAX_BIZ][bizinfo];
    Wie soll das bleiben ist ja MAX_BIZ drin.

    prntscr.com/lw4o9n
    Komme immer noch nicht in das Interior rein.

    Quellcode

    1. if(GetPVarInt(playerid,"InBiz")!=-1)
    2. {
    3. new b=GetPVarInt(playerid,"InBiz");
    4. new bi=bInfo[b][bInterior];
    5. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    6. {
    7. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    8. SetPlayerInterior(playerid,0);
    9. SetPlayerVirtualWorld(playerid,0);
    10. SetPVarInt(playerid,"InBiz",-1);
    11. return 1;
    12. }
    13. }
    14. else
    15. {
    16. for(new b;b<sizeof(bInfo);b++)
    17. {
    18. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    19. {
    20. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    21. new bi=bInfo[b][bInterior];
    22. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    23. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    24. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    25. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    26. SetPVarInt(playerid,"InBiz",b);
    27. new string[250];
    28. format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
    29. printf(string);
    30. return 1;
    31. }
    32. }
    33. }
    Alles anzeigen

    PAWN-Quellcode

    1. stock BizSpeichernAll()
    2. {
    3. for(new bizid = 0; bizid < MAX_BIZ; bizid++)
    4. {
    5. new query[256];
    6. mysql_format(db,query,sizeof(query),"UPDATE `biz` Set `bizbefehl`='%d',`biztype2`='%d',`opentime`='%d',`maxwaren`='%d',`X`='%f',`Y`='%f',`Z`='%f',`waren`='%d',`besitzer`='%d',`bizkasse`='%d' WHERE `ID`='%i'",
    7. bInfo[bizid][bizbefehl],bInfo[bizid][biztype2],bInfo[bizid][bopentime],bInfo[bizid][bmaxwaren],bInfo[bizid][bX],bInfo[bizid][bY],bInfo[bizid][bZ],bInfo[bizid][bbiz],bInfo[bizid][bwaren],bInfo[bizid][bbesitzer],bInfo[bizid][bbizkasse],bInfo[bizid][db_bid]);
    8. mysql_pquery(db,query);
    9. }
    10. }
    11. forward BizLaden();
    12. public BizLaden()
    13. {
    14. new rows;
    15. cache_get_row_count(rows);
    16. if(rows==0) return print("!!WARNING!! Geschäfte konnten nicht geladen werden !!WARNING!!");
    17. for(new bizid = 0; bizid < MAX_BIZ; bizid++)
    18. {
    19. cache_get_value_name_int(bizid,"ID",bInfo[bizid][db_bid]);
    20. if(bInfo[bizid][db_bid]==0)continue;
    21. cache_get_value_name_int(bizid,"biztype",bInfo[bizid][biztype]);
    22. cache_get_value_name_int(bizid,"waren",bInfo[bizid][bwaren]);
    23. cache_get_value_name(bizid,"besitzer",bInfo[bizid][bbesitzer],24);
    24. cache_get_value_name_int(bizid,"bizkasse",bInfo[bizid][bbizkasse]);
    25. cache_get_value_name_int(bizid,"eintritt",bInfo[bizid][beintritt]);
    26. cache_get_value_name_float(bizid,"X",bInfo[bizid][bX]);
    27. cache_get_value_name_float(bizid,"Y",bInfo[bizid][bY]);
    28. cache_get_value_name_float(bizid,"Z",bInfo[bizid][bZ]);
    29. cache_get_value_name_int(bizid,"biztype2",bInfo[bizid][biztype2]);
    30. cache_get_value_name_int(bizid,"opentime",bInfo[bizid][bopentime]);
    31. cache_get_value_name_int(bizid,"maxwaren",bInfo[bizid][bmaxwaren]);
    32. cache_get_value_name_int(bizid,"bizbefehl",bInfo[bizid][bizbefehl]);
    33. //printf("ID:%i Kasse:%i Besitzer:%s X:%f Y:%f Z:%f",bInfo[bizid][db_bid],bInfo[bizid][bbizkasse],bInfo[bizid][bbesitzer],bInfo[bizid][bX],bInfo[bizid][bY],bInfo[bizid][bZ]);
    34. }
    35. UpdateBizInfos();
    36. return 1;
    37. }
    Alles anzeigen
    zu

    PAWN-Quellcode

    1. stock BizSpeichernAll()
    2. {
    3. for(new bizid = 0; bizid < sizeof(bInfo); bizid++)
    4. {
    5. new query[256];
    6. mysql_format(db,query,sizeof(query),"UPDATE `biz` Set `bizbefehl`='%d',`biztype2`='%d',`opentime`='%d',`maxwaren`='%d',`X`='%f',`Y`='%f',`Z`='%f',`waren`='%d',`besitzer`='%d',`bizkasse`='%d' WHERE `ID`='%i'",
    7. bInfo[bizid][bizbefehl],bInfo[bizid][biztype2],bInfo[bizid][bopentime],bInfo[bizid][bmaxwaren],bInfo[bizid][bX],bInfo[bizid][bY],bInfo[bizid][bZ],bInfo[bizid][bbiz],bInfo[bizid][bwaren],bInfo[bizid][bbesitzer],bInfo[bizid][bbizkasse],bInfo[bizid][db_bid]);
    8. mysql_pquery(db,query);
    9. }
    10. }
    11. forward BizLaden();
    12. public BizLaden()
    13. {
    14. new rows;
    15. cache_get_row_count(rows);
    16. if(rows==0) return print("!!WARNING!! Geschäfte konnten nicht geladen werden !!WARNING!!");
    17. for(new bizid = 0; bizid < sizeof(bInfo); bizid++)
    18. {
    19. cache_get_value_name_int(bizid,"ID",bInfo[bizid][db_bid]);
    20. if(bInfo[bizid][db_bid]==0)continue;
    21. cache_get_value_name_int(bizid,"biztype",bInfo[bizid][biztype]);
    22. cache_get_value_name_int(bizid,"waren",bInfo[bizid][bwaren]);
    23. cache_get_value_name(bizid,"besitzer",bInfo[bizid][bbesitzer],24);
    24. cache_get_value_name_int(bizid,"bizkasse",bInfo[bizid][bbizkasse]);
    25. cache_get_value_name_int(bizid,"eintritt",bInfo[bizid][beintritt]);
    26. cache_get_value_name_float(bizid,"X",bInfo[bizid][bX]);
    27. cache_get_value_name_float(bizid,"Y",bInfo[bizid][bY]);
    28. cache_get_value_name_float(bizid,"Z",bInfo[bizid][bZ]);
    29. cache_get_value_name_int(bizid,"biztype2",bInfo[bizid][biztype2]);
    30. cache_get_value_name_int(bizid,"opentime",bInfo[bizid][bopentime]);
    31. cache_get_value_name_int(bizid,"maxwaren",bInfo[bizid][bmaxwaren]);
    32. cache_get_value_name_int(bizid,"bizbefehl",bInfo[bizid][bizbefehl]);
    33. //printf("ID:%i Kasse:%i Besitzer:%s X:%f Y:%f Z:%f",bInfo[bizid][db_bid],bInfo[bizid][bbizkasse],bInfo[bizid][bbesitzer],bInfo[bizid][bX],bInfo[bizid][bY],bInfo[bizid][bZ]);
    34. }
    35. UpdateBizInfos();
    36. return 1;
    37. }
    Alles anzeigen
    Also würde das so auch funktionieren?
  • Okay, der Erste Beitrag mit den Buildings hat mich super verwirrt...das hat ja nichts mit dem zu tun, was du gerade machst. Sowas kannst du also weglassen, das verwirrt nur.

    In meinen Augen, macht es überhaupt keinen Sinn, die Biz Positionen dynamisch in MySQL zu speichern, wohingegen du die Interiors zu den Bizzes statisch lädst.

    Was macht das für einen Sinn?

    Wäre es nicht sinniger, das alles dynamisch laden zu lassen?

    Sonst kannst du direkt auch die Bizzes statisch laden lassen xD


    Wenn du keinen Dummy dann nutzt:

    BrightLeaN schrieb:

    if(bInfo[bizid][db_bid]==0)continue;
    Diese Zeile macht dann keinen Sinn mehr.


    PS: Strings deklariert man immer außerhalb von Schleifen.


    Der Fehler entsteht offensichtlich, weil du mehr dynamische Bizzes hast, als statische Interiors angegeben.

    Das ist dein Fehler. Also machst du beides dynamisch, löst das quasi all deine Probleme und macht dein System um einiges sauberer.


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Ich bin jetzt durcheinander.

    Soll jetzt alles was MAX_BIZ] hatte wieder rückgängig machen oder ist sizeof(bInfo) doch richtig.

    Ich habe bewusst die Interior XYZ Pos nicht in der Datenbank gespeichert damit ich einfacher alles ändern kann weil es am Anfang bequemer ist.

    Was soll ich jetzt genau tun um es dynamisch zu machen?
    Was soll weg fallen, welche Variable soll dazu kommen usw.


    PAWN-Quellcode

    1. #define MAX_BIZ 7



    PAWN-Quellcode

    1. enum bizinfo{
    2. db_bid,
    3. biztype,
    4. biztype2,
    5. bwaren,
    6. bbesitzer[24],
    7. bbizkasse,
    8. beintritt,
    9. Float:bX,
    10. Float:bY,
    11. Float:bZ,
    12. bInterior,
    13. bopentime,
    14. bmaxwaren,
    15. bizbefehl
    16. };
    17. //weiter unten
    18. new bInfo[MAX_BIZ][bizinfo];
    Alles anzeigen

    PAWN-Quellcode

    1. enum bizinteriors{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Biztype,
    6. Float:IX,Float:IY,Float:IZ// Exit Position
    7. }
    8. static const BizInts[][bizinteriors]={
    9. {"Dummy",0,0,0,0.0,0.0,0.0},
    10. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    11. };
    Alles anzeigen

    PAWN-Quellcode

    1. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    2. {
    3. // Biz
    4. if(GetPVarInt(playerid,"InBiz")!=-1)
    5. {
    6. new b=GetPVarInt(playerid,"InBiz");
    7. new bi=bInfo[b][bInterior];
    8. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    9. {
    10. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    11. SetPlayerInterior(playerid,0);
    12. SetPlayerVirtualWorld(playerid,0);
    13. SetPVarInt(playerid,"InBiz",-1);
    14. return 1;
    15. }
    16. }
    17. else
    18. {
    19. for(new b;b<sizeof(bInfo);b++)
    20. {
    21. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    22. {
    23. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    24. new bi=bInfo[b][bInterior];
    25. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    26. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    27. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    28. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    29. SetPVarInt(playerid,"InBiz",b);
    30. new string[250];
    31. format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
    32. printf(string);
    33. return 1;
    34. }
    35. }
    36. }
    37. }
    38. return 1;
    39. }
    Alles anzeigen

    PAWN-Quellcode

    1. stock IsAtBiz(playerid)
    2. {
    3. for(new b;b<sizeof(bInfo);b++)
    4. {
    5. if(!IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ])) continue;
    6. return b;
    7. }
    8. return 0;
    9. }
  • Schreibs mal so:

    C-Quellcode

    1. enum bizinteriors{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Biztype,
    6. Float:IX,Float:IY,Float:IZ// Exit Position
    7. }
    8. static const BizInts[][bizinteriors]={
    9. {"Dummy",0,0,0,0.0,0.0,0.0},
    10. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    11. };
    12. enum bizinfo{
    13. db_bid,
    14. biztype,
    15. biztype2,
    16. bwaren,
    17. bbesitzer[24],
    18. bbizkasse,
    19. beintritt,
    20. Float:bX,
    21. Float:bY,
    22. Float:bZ,
    23. bInterior,
    24. bopentime,
    25. bmaxwaren,
    26. bizbefehl
    27. };
    28. //weiter unten
    29. new bInfo[sizeof(BizInts)][bizinfo];
    Alles anzeigen
    Das zwingt dich, dass jedes Biz, jetzt einen Interior benötigt, den du angeben musst, wenn dir das "anfangs" lieber ist..wieso auch immer :D

    Und wie gesagt, lösche MAX_BIZ. (Vorerst. Wenn du dynamische Interiors verwendest, kannst es ja wieder einführen. Wobei es nicht nötig ist, da du ja sizeof überall verwendest und sich das dadurch dynamisch anpasst, wenn du die größe von dem Array ändert).

    Jetzt ist es auch egal, ob du sizeof(bInfo) oder sizeof(BizInts) verwendest, da die den gleichen Wert haben :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Habe ich das richtig verstanden das ich den Quellcode so einfach einfügen soll weiter unten zu dem OnPlayerKeyChange davor so?
    Weil ich habe den new jetzt geändert und da steht das BizInts nicht definiert wurde.

    Also, den Quellcode komplett so wie er ist nach unten setzten oder einfach nur den bInfo new einfügen da wo der alte war?

    Max_BIZ wird gelöscht :D
  • PAWN-Quellcode

    1. enum bizinteriors{
    2. Name[35],
    3. Interior,
    4. Welt,
    5. Biztype,
    6. Float:IX,Float:IY,Float:IZ// Exit Position
    7. }
    8. static const BizInts[][bizinteriors]={
    9. {"Dummy",0,0,0,0.0,0.0,0.0},
    10. {"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
    11. };
    12. enum bizinfo{
    13. db_bid,
    14. biztype,
    15. biztype2,
    16. bwaren,
    17. bbesitzer[24],
    18. bbizkasse,
    19. beintritt,
    20. Float:bX,
    21. Float:bY,
    22. Float:bZ,
    23. bInterior,
    24. bopentime,
    25. bmaxwaren,
    26. bizbefehl
    27. };
    28. new bInfo[sizeof(BizInts)][bizinfo];
    Alles anzeigen

    PAWN-Quellcode

    1. if(GetPVarInt(playerid,"InBiz")!=-1)
    2. {
    3. new b=GetPVarInt(playerid,"InBiz");
    4. new bi=bInfo[b][bInterior];
    5. if(IsPlayerInRangeOfPoint(playerid,3.0,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]))
    6. {
    7. SetPlayerPos(playerid,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]);
    8. SetPlayerInterior(playerid,0);
    9. SetPlayerVirtualWorld(playerid,0);
    10. SetPVarInt(playerid,"InBiz",-1);
    11. return 1;
    12. }
    13. }
    14. else
    15. {
    16. for(new b;b<sizeof(bInfo);b++)
    17. {
    18. if(IsPlayerInRangeOfPoint(playerid,5.0,bInfo[b][bX],bInfo[b][bY],bInfo[b][bZ]))
    19. {
    20. if(bInfo[b][biztype]==3)return SendClientMessage(playerid,-1,"Diesen BizTyp kannst du nicht betreten!");
    21. new bi=bInfo[b][bInterior];
    22. if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
    23. SetPlayerPos(playerid,BizInts[bi][IX],BizInts[bi][IY],BizInts[bi][IZ]);
    24. SetPlayerInterior(playerid,BizInts[bi][Interior]);
    25. SetPlayerVirtualWorld(playerid,BizInts[bi][Welt]);
    26. SetPVarInt(playerid,"InBiz",b);
    27. new string[250];
    28. format(string,sizeof(string),"Binfo Interior: %d | BizInfo Y: %f | BizInfo Interior: %d",bi,BizInts[bi][IY],BizInts[bi][Interior]);
    29. printf(string);
    30. return 1;
    31. }
    32. }
    Alles anzeigen
    Wieder selber Fehler in der Konsole wenn ich rein gehen will. wie muss ich den jetzt angeben? also ich habe 8 Biz soll ich jetzt noch 6 Dummys hinterherschicken oder wie
    muss ich das verstehen? :D
  • BrightLeaN schrieb:

    also ich habe 8 Biz soll ich jetzt noch 6 Dummys hinterherschicken oder wie
    muss ich das verstehen?
    Richtig, so dass du gleichviele Ints, wie Bizzes hast.

    Sonst wie gesagt, bau es dynamisch auf, dann kannste einfach prüfen, ob das Biz schon einen Interior hat oder nicht.


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/