Probiere es aus, lass es dir Debuggen.
Regel nummer 1: nichts ohne Debug, schreiben.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
[01:37:52] Zahl 1[01:37:52] Zahl 2
[01:37:52] Zahl 3
[01:37:52] Zahl 4
[01:37:52] Zahl 5
[01:37:52] Zahl 6
[01:37:52] Zahl 7
[01:37:52] Zahl 8
Code
Alles anzeigenCMD:lieferung(playerid,params[]) { new vehicleid = GetPlayerVehicleID(playerid); if(GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514) { if(GetVehicleModel(GetVehicleTrailer(vehicleid)) == 435) { #pragma unused params new string[550], Produkte; for(new i = 0; i < sizeof(Biz); i++) { printf("Zahl %d\n", i+1); Produkte = Biz[i][bProdukte]-Biz[i][bMaxProdukte]; format(string,sizeof(string),"Ammunation LS\t\t\t\tBenötigt: %d Produkte\nBurgershot Hauptsitz\t\t\tBenötigt: %d Produkte\nClucking Bell Hauptsitz\t\t\tBenötigt: %d Produkte\n", Produkte, Produkte, Produkte); format(string,sizeof(string),"%sPizza Stack Hauptsitz\t\t\tBenötigt: %d Produkte\n24/7 Supermarkt Hauptsitz\t\tBenötigt: %d Produkte\nPaintball Arena\t\t\t\tBenötigt: %d Produkte\nAdvertise Biz\t\t\t\tBenötigt: %d Produkte\n", string, Produkte, Produkte, Produkte, Produkte); ShowPlayerDialog(playerid,DIALOG_FIRMEN,DIALOG_STYLE_LIST,"Transport GmbH - Firmen Übersicht",string,"GPS","Schließen"); } } } return 1; }
Laut den debugg zählt er von 1 ab... -
Und was ist jetzt das Problem noch? Vermutlich das es nicht korrekt angezeigt wird. Aber ich verstehe auch ehrlich gesagt nicht was Du mit Zeile 14 und 15 bezwecken willst. Weil das in der for- Schleife gar keinen Sinn macht.
-
Und was ist jetzt das Problem noch? Vermutlich das es nicht korrekt angezeigt wird. Aber ich verstehe auch ehrlich gesagt nicht was Du mit Zeile 14 und 15 bezwecken willst. Weil das in der for- Schleife gar keinen Sinn macht.
Um den Spieler den Dialog dann an zeigen zu lassen das er weiß wieviel die bizen an Produkte benötigen...
Richtig er zeigt mir immer nur -2 an -
Um den Knoten mal platzen zu lassen.
- Um eine Schleife bei 1 starten zu lassen, setzt du i Anfangs einfach auf 1. mit new i=1
- Dein format überschreibt sich permanent mit der Schleife, deshalb bekommst du nur das letzte Ergebnis.
- Alle deine Ergebnisse sind immer identisch...da du das nirgends richtig formatierst.
- So wie du das haben willst, brauchst du gar keine Schleife.
- Lass das mit dem #pragma unused ..dass kein schöner Coding Stil.
C
Alles anzeigenCMD:lieferung(playerid) { new vehicleid = GetPlayerVehicleID(playerid); if((GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514) && GetVehicleModel(GetVehicleTrailer(vehicleid)) == 435) { #define getProdukts(%0) (Biz[%0][bProdukte]-Biz[%0][bMaxProdukte]) new string[550]; format(string,sizeof(string),"Ammunation LS\t\t\t\tBenötigt: %d Produkte\nBurgershot Hauptsitz\t\t\tBenötigt: %d Produkte\nClucking Bell Hauptsitz\t\t\tBenötigt: %d Produkte\n", getProdukts(1), getProdukts(2), getProdukts(3)); format(string,sizeof(string),"%sPizza Stack Hauptsitz\t\t\tBenötigt: %d Produkte\n24/7 Supermarkt Hauptsitz\t\tBenötigt: %d Produkte\nPaintball Arena\t\t\t\tBenötigt: %d Produkte\nAdvertise Biz\t\t\t\tBenötigt: %d Produkte\n", string, getProdukts(4), getProdukts(5), getProdukts(6), getProdukts(7)); ShowPlayerDialog(playerid,DIALOG_FIRMEN,DIALOG_STYLE_LIST,"Transport GmbH - Firmen Übersicht",string,"GPS","Schließen"); #undef getProdukts } return 1; }
Da, deine Lösung, wenn du statisch schon die Namen darein packst, dann musste auch deine Abfragen statisch machen...
-
-
Um den Knoten mal platzen zu lassen.
- Um eine Schleife bei 1 starten zu lassen, setzt du i Anfangs einfach auf 1. mit new i=1
- Dein format überschreibt sich permanent mit der Schleife, deshalb bekommst du nur das letzte Ergebnis.
- Alle deine Ergebnisse sind immer identisch...da du das nirgends richtig formatierst.
- So wie du das haben willst, brauchst du gar keine Schleife.
- Lass das mit dem #pragma unused ..dass kein schöner Coding Stil.
C
Alles anzeigenCMD:lieferung(playerid) { new vehicleid = GetPlayerVehicleID(playerid); if((GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514) && GetVehicleModel(GetVehicleTrailer(vehicleid)) == 435) { #define getProdukts(%0) (Biz[%0][bProdukte]-Biz[%0][bMaxProdukte]) new string[550]; format(string,sizeof(string),"Ammunation LS\t\t\t\tBenötigt: %d Produkte\nBurgershot Hauptsitz\t\t\tBenötigt: %d Produkte\nClucking Bell Hauptsitz\t\t\tBenötigt: %d Produkte\n", getProdukts(1), getProdukts(2), getProdukts(3)); format(string,sizeof(string),"%sPizza Stack Hauptsitz\t\t\tBenötigt: %d Produkte\n24/7 Supermarkt Hauptsitz\t\tBenötigt: %d Produkte\nPaintball Arena\t\t\t\tBenötigt: %d Produkte\nAdvertise Biz\t\t\t\tBenötigt: %d Produkte\n", string, getProdukts(4), getProdukts(5), getProdukts(6), getProdukts(7)); ShowPlayerDialog(playerid,DIALOG_FIRMEN,DIALOG_STYLE_LIST,"Transport GmbH - Firmen Übersicht",string,"GPS","Schließen"); #undef getProdukts } return 1; }
Da, deine Lösung, wenn du statisch schon die Namen darein packst, dann musste auch deine Abfragen statisch machen...
Interessant wie sowas gescriptet wird.....
Warum steht eigentlich ein Minus davor wen das Biz Produkte benötigt..
-
Warum steht eigentlich ein Minus davor wen das Biz Produkte benötigt..
Das kannst du einfach ändern indem du das Makro so schreibst:
#define getProdukts(%0) (Biz[%0][bMaxProdukte]-Biz[%0][bProdukte])
Hatte das nur so von dir übernommen gehabt.
Und er hat halt immer von dem kleinen das Große abgezogen.
Somit stand halt überall (z.B.): 4-5 = -1 anstatt 5-4 = 1
Weil halt 1 Produkt gefehlt hat.
-
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hat sich erledigt (). -
-
Ich kenne dein System leider nicht, tut mir Leid.
Aber prinzipiell sollte es da eine Variable geben auf die du zugreifen kannst
-
Code
Alles anzeigenstock UpdateTankLabel(tankeID, owned) { new string[256], Benzin; Benzin = floatround(Tanke[tankeID][tMaxLiter])-floatround(Tanke[tankeID][tLiter]); if(owned == 0) { format(string, sizeof(string), "Diese Tankstelle steht zum Verkauf:\n%s\nBesitzer: Niemand\nPreis: $%d\n\nZum Kaufen tippe /buytanke.", Tanke[tankeID][tName], Tanke[tankeID][tPreis]); UpdateDynamic3DTextLabelText(Tanke[tankeID][tText], COLOR_ALPHA_WHITE, string); } else if(owned == 1) { format(string, sizeof(string), "{AFAFAF}%s\n\nBesitzer: %s\nTeilhaber: %s\nLiterpreis: %d$\nBenötigte Liter: %d\nBezugspreis: %d$\n\nFahrzeug mit /fill betanken", Tanke[tankeID][tName], Tanke[tankeID][tBesitzer], Tanke[tankeID][tTeilhaber], Tanke[tankeID][tPreisProLiter], Benzin, Tanke[tankeID][tBenzinAnkauf]); UpdateDynamic3DTextLabelText(Tanke[tankeID][tText], COLOR_ALPHA_WHITE, string); } }
Zeigt er mir schon Richtig an das 5k Benzin Fehlt.
Die Frage ist was ich noch machen muss das es beim Tanken dazu gezählt wird..?
-
Was soll dazu gezählt werden?
-
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Habe es hin bekommen! Danke (). -
Guten Abend,
ich möchte gerne meinen Actor erstellen und dann in einer Virtuellen Welt setzen mit einer Animation, leider klappt es nicht.
Actor wird Erstellt, Skin wird gesetzt, Virtuelle Welt wird gesetzt nur die Animation leider nicht.
enum ActorEnum{
acID,
acSkin,
Float:acX,
Float:acY,
Float:acZ,
Float:acA,
acLib[32],
acAnim[64],
Float:acSpeed,
acLoop,
acLockX,
acLockY,
acFreeze,
acTime,
acVW
};
new AcEnum[][ActorEnum] = {
{0, 12, 1477.2376, -1807.7637, 2350.4782, 0.0000, "PED", "SEAT_IDLE", 4.0999, 0, 0, 0, 1, 0, 1337}
};// OnGameModeInit
for(new i = 0; i < sizeof(AcEnum); i++)
{
AcEnum[i][acID] = CreateActor(AcEnum[i][acSkin], AcEnum[i][acX], AcEnum[i][acY], AcEnum[i][acZ], AcEnum[i][acA]);
SetActorVirtualWorld(AcEnum[i][acID], AcEnum[i][acVW]);
PreloadActorAnimations(AcEnum[i][acID]);
ApplyActorAnimation(AcEnum[i][acID], AcEnum[i][acLib], AcEnum[i][acAnim], AcEnum[i][acSpeed], AcEnum[i][acLoop], AcEnum[i][acLockX], AcEnum[i][acLockY], AcEnum[i][acFreeze], AcEnum[i][acTime]);
}static s_AnimationLibraries[][] = {
!"AIRPORT", !"ATTRACTORS", !"BAR", !"BASEBALL",
!"BD_FIRE", !"BEACH", !"BENCHPRESS", !"BF_INJECTION",
!"BIKED", !"BIKEH", !"BIKELEAP", !"BIKES",
!"BIKEV", !"BIKE_DBZ", !"BMX", !"BOMBER",
!"BOX", !"BSKTBALL", !"BUDDY", !"BUS",
!"CAMERA", !"CAR", !"CARRY", !"CAR_CHAT",
!"CASINO", !"CHAINSAW", !"CHOPPA", !"CLOTHES",
!"COACH", !"COLT45", !"COP_AMBIENT", !"COP_DVBYZ",
!"CRACK", !"CRIB", !"DAM_JUMP", !"DANCING",
!"DEALER", !"DILDO", !"DODGE", !"DOZER",
!"DRIVEBYS", !"FAT", !"FIGHT_B", !"FIGHT_C",
!"FIGHT_D", !"FIGHT_E", !"FINALE", !"FINALE2",
!"FLAME", !"FLOWERS", !"FOOD", !"FREEWEIGHTS",
!"GANGS", !"GHANDS", !"GHETTO_DB", !"GOGGLES",
!"GRAFFITI", !"GRAVEYARD", !"GRENADE", !"GYMNASIUM",
!"HAIRCUTS", !"HEIST9", !"INT_HOUSE", !"INT_OFFICE",
!"INT_SHOP", !"JST_BUISNESS", !"KART", !"KISSING",
!"KNIFE", !"LAPDAN1", !"LAPDAN2", !"LAPDAN3",
!"LOWRIDER", !"MD_CHASE", !"MD_END", !"MEDIC",
!"MISC", !"MTB", !"MUSCULAR", !"NEVADA",
!"ON_LOOKERS", !"OTB", !"PARACHUTE", !"PARK",
!"PAULNMAC", !"PED", !"PLAYER_DVBYS", !"PLAYIDLES",
!"POLICE", !"POOL", !"POOR", !"PYTHON",
!"QUAD", !"QUAD_DBZ", !"RAPPING", !"RIFLE",
!"RIOT", !"ROB_BANK", !"ROCKET", !"RUSTLER",
!"RYDER", !"SCRATCHING", !"SHAMAL", !"SHOP",
!"SHOTGUN", !"SILENCED", !"SKATE", !"SMOKING",
!"SNIPER", !"SPRAYCAN", !"STRIP", !"SUNBATHE",
!"SWAT", !"SWEET", !"SWIM", !"SWORD",
!"TANK", !"TATTOOS", !"TEC", !"TRAIN",
!"TRUCK", !"UZI", !"VAN", !"VENDING",
!"VORTEX", !"WAYFARER", !"WEAPONS", !"WUZI",
!"WOP", !"GFUNK", !"RUNNINGMAN"
};stock static PreloadActorAnimations(actorid)
{
for(new i = 0; i < sizeof(s_AnimationLibraries); i ++)
{
ApplyActorAnimation(actorid, s_AnimationLibraries[i], "null", 0.0, 0, 0, 0, 0, 0);
}
}Hoffe einer kann mir Helfen.
Mit freundlichen Grüßen.
-
Versuch mal die Animation im OnActorStreamIn Callback zu laden.
-
@JustMe.77
Danke, das geht, leider bekomme ich jetzt über "CrashDetect" folgende Fehler angezeigt:
[03:37:47] [debug] Run time error 4: "Array index out of bounds"
[03:37:47] [debug] Attempted to read/write array element at index 3 in array of size 3
[03:37:47] [debug] AMX backtrace:
[03:37:47] [debug] #0 00069be0 in public OnActorStreamIn (0, 0) from BlvckDown-RL.amxpublic OnActorStreamIn(actorid, forplayerid)
{
for(new i = 0; i < sizeof(AcEnum[]); i++)
{
ApplyActorAnimation(AcEnum[i][acID], AcEnum[i][acLib], AcEnum[i][acAnim], AcEnum[i][acSpeed], AcEnum[i][acLoop], AcEnum[i][acLockX], AcEnum[i][acLockY], AcEnum[i][acFreeze], AcEnum[i][acTime]);
}
return 1;
}Kannst mir dabei vielleicht dabei auch noch Helfen?
-
@JustMe.77
Danke, das geht, leider bekomme ich jetzt über "CrashDetect" folgende Fehler angezeigt:[03:37:47] [debug] Run time error 4: "Array index out of bounds"[03:37:47] [debug] Attempted to read/write array element at index 3 in array of size 3[03:37:47] [debug] AMX backtrace:[03:37:47] [debug] #0 00069be0 in public OnActorStreamIn (0, 0) from BlvckDown-RL.amxpublic OnActorStreamIn(actorid, forplayerid){ for(new i = 0; i < sizeof(AcEnum[]); i++) { ApplyActorAnimation(AcEnum[i][acID], AcEnum[i][acLib], AcEnum[i][acAnim], AcEnum[i][acSpeed], AcEnum[i][acLoop], AcEnum[i][acLockX], AcEnum[i][acLockY], AcEnum[i][acFreeze], AcEnum[i][acTime]); } return 1;}
Kannst mir dabei vielleicht dabei auch noch Helfen?
Du sprengst deinen Array, weil du die Größe der zweiten Dimension als Schleifenbedingung benutzt, statt die erste Dimension. Die zweite ist nämlich die Anzahl deiner Variablen innerhalb deines Array-Enums. Entferne einfach die eckigen Klammern innerhalb von sizeof(), dann sollte das gehen.
-
Moin,
Mal eine frage wie kann man abfragen ob der Spieler aufm Desktop oder im GTA Menü ist ?
Sprich prüfen ob der Spieler AFK ist oder gerade Aktiv am Spielgeschehen Teil nimmt ? -
Kannst ja mal in den Thread schauen: http://forum.sa-mp.com/showthread.php?t=557644
oder in 1000 weitere, dieses Thema wurde so oft schon diskutiert.
Um es kurz zu machen, wenn man auf dem Desktop ist / oder im Menü, dann wird OnPlayerUpdate für den Spieler nicht aufgerufen.
Und das kannst du natürlich wie oben gezeigt ausnutzen.
Eine Korrektur nur, nimm nicht GetTickCount, wenn du die afk Zeit bestimmten willst, sondern gettime()