Okay, jetzt verstehe ich das ganze Vielen Dank
Beiträge von German_ScripterHD
-
-
Ich verstehe das nicht ganz mit dem splitten. Kann mir das jemand an Hand des Codes erklären? (Wäre sehr dankbar darüber)
Mit freundlichen Grüßen German_ScripterHD
-
nach deinem Wunsch müsstest du diesen vorher noch splitten.
Und wie kann ich das splitten?
-
Vielen Dank
Aber eine Frage habe ich noch, da ich gerade irgendwie auf dem Kabel stehe...
Angenommen es tippt jemand Server_Test ein, und ich möchte 2 Narichten wiedergeben die in etwa so aus sehen:
(1) : "Server"
(2) : "Test"Aber wie mache ich das genau?
-
Hallo Brotfische,
Ich habe eine Frage, wie kann man abfragen ob im inputtext folgendes Zeichen vorkommt? (Unterstrich '_' )
Mit freundlichen Grüßen German_scripterHD
-
-
Habe es jetzt so,:
Cstock __SendClientMessage(playerid, color, const string[]) // by Deadmau5 | edited und hooked by BlackAce | last edit by German_ScripterHD (sendmsg) { new strings[16][128],sendmsg[148]; split(string,strings,'\n'); for(new y; y<sizeof(strings); y++) if(strings[y][0]) _SendClientMessage(playerid,color,sendmsg[y]); return true; }
aber es werden auch keine SendClientMessages mit oder ohne "\n" angezeigt. (Log besteht Fehler besteht aber nicht mehr)
-
Hallo Brotfische,
Ich habe mal wieder ein Problem, ich wollte eigentlich das man in der SendClientMessage Funktion einen Zeilenbruch machen, dieser wird aber nicht angzeigt. Sobald man connectet werden alle Strings die vom Server aus gesendet werden wie z.B "Du hast dich erfolgreich eingeloggt." usw. nicht gesendent. Beim Connecten wird auch ein Fehler Code in der Console angezeigt. (siehe unten.)
[tabmenu]
[tab='Code']C
Alles anzeigennative _SendClientMessage(playerid, color, const string[]) = SendClientMessage; #define SendClientMessage __SendClientMessage stock split(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)) { if(strsrc[i] == delimiter || i == strlen(strsrc)) { len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; } stock __SendClientMessage(playerid, color, const string[]) // by Deadmau5 | edited und hooked by BlackAce | last edit by German_ScripterHD (sendmsg) { new strings[4][128],sendmsg[148]; split(string,strings,'\n'); for(new y,l=strlen(string);y!=l;y++) if(strings[y][0]) _SendClientMessage(playerid,color,sendmsg[y]); return true; }
[tab='Fehler Code (Debug)']C
Alles anzeigen[22:00:15] [debug] Run time error 4: "Array index out of bounds" [22:00:15] [debug] Accessing element at index 4 past array upper bound 3 [22:00:15] [debug] AMX backtrace: [22:00:15] [debug] #0 00108748 in __SendClientMessage (playerid=0, color=-16776961, string[]=@0dff8eec "Willkommen auf XXXX") at C:\XXX\XXX\XXX\XXX\XXX\gamemodes\selfmadescript.pwn:19094 [22:00:15] [debug] #1 000746d8 in ?? (... <1 argument>) at C:\XXX\XXX\XXX\XXX\XXX\gamemodes\selfmadescript.pwn:7265 [22:00:15] [debug] #2 0001195c in public Itter_OnPlayerConnect (playerid=0) at C:\XXX\XXX\XXX\XXX\XXX\pawno\include\YSI\y_hooks/impl.inc:618 [22:00:15] [debug] #3 0000d5b4 in public SSCANF_OnPlayerConnect (playerid=0) at C:\XXX\XXX\XXX\XXX\XXX\pawno\include\YSI\y_iterate.inc:646 [22:00:15] [debug] #4 000015ac in public OnPlayerConnect (playerid=0) at C:\XXX\XXX\XXX\XXX\XXX\pawno\include\sscanf2.inc:236 [22:00:24] [debug] Run time error 4: "Array index out of bounds" [22:00:24] [debug] Accessing element at index 4 past array upper bound 3 [22:00:24] [debug] AMX backtrace: [22:00:24] [debug] #0 00108748 in __SendClientMessage (playerid=0, color=9568255, string[]=@0cf7fdfc "Erfolgreich eingeloggt.") at C:\XXX\XXX\XXX\XXX\XXX\gamemodes\selfmadescript.pwn:19094 [22:00:24] [debug] #1 000393d0 in public OnPasswordResponse (playerid=0) at C:\XXX\XXX\XXX\XXX\XXX\gamemodes\selfmadescript.pwn:3317
-
Das Problem mit dem nicht sichtbaren Gangwar gebiet habe ich hinbekommen.
Nur noch das Problem das die Punkte nicht syncron geupdatet werden:
C
Alles anzeigenpublic OnPlayerDeath(playerid,killerid) { if(killerid != INVALID_PLAYER_ID) { new string1[40],string2[30]; new gangzone = IsPlayerInGangZone(playerid); if(gangzone==-1)return print("[debug] OnPlayerDeath - gangzone==-1"); if(gwInfo[gangzone][running] == 1) { if(sInfo[playerid][fraktion] == gwInfo[gangzone][angreifer] && sInfo[killerid][fraktion] == gwInfo[gangzone][besitzer]) { gwInfo[gangzone][punkteVerteidiger]++; SendClientMessageToAllEx(-1,"gwInfo[gangzone][punkteVerteidiger]= %d",gwInfo[gangzone][punkteVerteidiger]); SendClientMessageToAll(-1,"Punkte wurden angezeigt...."); format(string1,sizeof(string1),"%d",gwInfo[gangzone][punkteVerteidiger]); for(new i; i < MAX_PLAYERS; i++) { if(sInfo[i][fraktion] == gwInfo[gangzone][angreifer] && sInfo[i][fraktion] == gwInfo[gangzone][besitzer]) { PlayerTextDrawSetString(i,GangTD[i][PunkteFraktion1],string1); } } } else if(sInfo[playerid][fraktion] == gwInfo[gangzone][besitzer] && sInfo[killerid][fraktion] == gwInfo[gangzone][angreifer]) { gwInfo[gangzone][punkteAngreifer]++; SendClientMessageToAllEx(-1,"gwInfo[gangzone][punkteAngreifer]= %d",gwInfo[gangzone][punkteAngreifer]); SendClientMessageToAll(-1,"Punkte wurden angezeigt...."); format(string2,sizeof(string2),"%d",gwInfo[gangzone][punkteAngreifer]); for(new i; i < MAX_PLAYERS; i++) { if(sInfo[i][fraktion] == gwInfo[gangzone][besitzer] || sInfo[i][fraktion] == gwInfo[gangzone][angreifer]) { PlayerTextDrawSetString(i,GangTD[i][PunkteFraktion2],string2); } } } return 1; } return 1; } return 1; }
-
Sollte der Fehler noch bestehen,
- lade dir bitte mal das 'crashdetected Plugin' runter und füge es ein.
- außerdem erstelle im pawno Ordner foldende Datei: 'pawn.cfg' und schreibe in die Datei "-d3" rein (ohne "")
- nachdem erstellen der pawn.cfg Datei, einemal das Script neu compiler'en.
- danach einmal auf den Server connecten und den Befehl eingeben.
- Zum Schluss einfach den Server_Log posten.Mit freundlichen Grüßen German_ScripterHD
-
Es besteht wieder ein Problem, die Zeit wird jetzt richtig angzeigt aber mir ist aufgefallen das wieder Gangzone ID 0 (Dillomore) nicht angezeigt wird. Außerdem werden die Punkte auf dem Textraw nicht sycron Akktuallisiert.
[tabmenu][tab='OnGameModeInit']
COnGameModeInit(){ for(new i = 0; i<MAX_GANGZONES; i++){ mysql_format(dbhandle, querye,256, "SELECT * FROM gangzones WHERE id = %d",i); mysql_function_query(dbhandle, querye, true, "GangZonesLoad","d",i); }
[tab='GangZonesLoad']
C
Alles anzeigenpublic GangZonesLoad(id) { new rows, field; cache_get_data(rows, field); if(!rows)return 1; cache_get_row(0, 1, gwInfo[id][f_gebiet], dbhandle, 258); printf("Gangzoneid: %i = %s",id,gwInfo[id][f_gebiet]); gwInfo[id][besitzer] = cache_get_row_int(0, 2); gwInfo[id][minx] = cache_get_row_float(0, 3); gwInfo[id][miny] = cache_get_row_float(0, 4); gwInfo[id][maxx] = cache_get_row_float(0, 5); gwInfo[id][maxy] = cache_get_row_float(0, 6); gwInfo[id][running] = cache_get_row_int(0, 9); gwInfo[id][punkteAngreifer] = cache_get_row_int(0, 7); gwInfo[id][punkteVerteidiger] = cache_get_row_int(0, 8); gwInfo[id][angreifer] = cache_get_row_int(0, 13); gwInfo[id][RemainingHour] = cache_get_row_int(0, 10); gwInfo[id][RemainingMin] = cache_get_row_int(0, 11); gwInfo[id][RemainingSec] = cache_get_row_int(0, 12); gwInfo[id][angreifer] = cache_get_row_int(0, 13); printf("Besitzer des Gebiets %d ist: %d", id, gwInfo[id][besitzer]); CreateGangZones(id); return 1; }
[tab='print (GangZonesLoad)']
C
Alles anzeigen[15:08:17] Gangzoneid: 1 = Dillimore [15:08:17] Besitzer des Gebiets 1 ist: 0 [15:08:17] Gangzoneid: 2 = Blueberry [15:08:17] Besitzer des Gebiets 2 ist: 3 [15:08:17] Gangzoneid: 3 = Redsands [15:08:17] Besitzer des Gebiets 3 ist: 5 [15:08:17] Gangzoneid: 4 = Prickle Pine [15:08:17] Besitzer des Gebiets 4 ist: 4 [15:08:17] Gangzoneid: 5 = Las Barrancas [15:08:17] Besitzer des Gebiets 5 ist: 5 [15:08:17] Gangzoneid: 6 = Country City [15:08:17] Besitzer des Gebiets 6 ist: 4 [15:08:17] Gangzoneid: 7 = Las Payasadas [15:08:17] Besitzer des Gebiets 7 ist: 3 [15:08:17] Gangzoneid: 8 = Ocan Flats [15:08:17] Besitzer des Gebiets 8 ist: 4 [15:08:17] Gangzoneid: 9 = Doherty [15:08:17] Besitzer des Gebiets 9 ist: 4 [15:08:17] Gangzoneid: 10 = Glen Park [15:08:17] Besitzer des Gebiets 10 ist: 5 [15:08:17] Gangzoneid: 11 = East Beach [15:08:17] Besitzer des Gebiets 11 ist: 3 [15:08:17] Gangzoneid: 12 = Willowfield [15:08:17] Besitzer des Gebiets 12 ist: 5 [15:08:17] Gangzoneid: 13 = Fortcarson [15:08:17] Besitzer des Gebiets 13 ist: 3 [15:08:17] Gangzoneid: 14 = Las Colinas [15:08:17] Besitzer des Gebiets 14 ist: 6 [15:08:17] Gangzoneid: 15 = Downtown [15:08:17] Besitzer des Gebiets 15 ist: 6 [15:08:17] Gangzoneid: 16 = Pilgrim [15:08:17] Besitzer des Gebiets 16 ist: 6
[/tabmenu] -
Es wird leider nur 1 angzeigt.
-
Klappt leider immer noch nicht
Wenn ich es mit DIALOG_STYLE_LIST schreibe, klappt alles. Ich möchte es aber gerne übersichtlicher haben.
Code: (DIALOG_STYLE_LIST)
C
Alles anzeigenocmd:ware2(playerid) { new string[2500],RandomStartFabrik,RandomZielFabrik; for(new i=0; i < sizeof(FrachtInfo); i++) { RandomStartFabrik = SelectRandomFabrik(FrachtInfo[i][fracht_startid]); RandomZielFabrik = SelectRandomFabrik(FrachtInfo[i][fracht_zielid]); format(string,sizeof(string),"%s\n%s (%dt) | %s | %s",string,FrachtInfo[i][fracht_name],FrachtInfo[i][fracht_gewicht],FabrikInfo[RandomStartFabrik][uName],FabrikInfo[RandomZielFabrik][uName]); } ShowPlayerDialog(playerid,DIALOG_FRACHT,DIALOG_STYLE_LIST,"Frachtmarkt: (Wähle eine Ladung aus)",string,"Annehmen","Abbrechen"); return 1; }
-
Ich habe jetzt ein Problem mit dem Befehl "Ware" und zwar wird mir der Dialog nicht angzeigt. Davor hatte ich den DIALOG_STYLE_LIST da klappte alles aber ich wollte es übersichtlicher machen, aber seit dem neuen Dialog wird kein Dialog angezeigt.
C
Alles anzeigenocmd:ware(playerid) { new string[1500],string2[1500],inhalt[1500],RandomStartFabrik,RandomZielFabrik; for(new i=0; i < sizeof(FrachtInfo); i++) { RandomStartFabrik = SelectRandomFabrik(FrachtInfo[i][fracht_startid]); RandomZielFabrik = SelectRandomFabrik(FrachtInfo[i][fracht_zielid]); format(string2,sizeof(string2),"%s\t%d Tonnen\t%s\t%s\n%s",FrachtInfo[i][fracht_name],FrachtInfo[i][fracht_gewicht],FabrikInfo[RandomStartFabrik][uName],FabrikInfo[RandomZielFabrik][uName]); strcat(string, string2); } ShowPlayerDialog(playerid,DIALOG_FRACHT,DIALOG_STYLE_TABLIST_HEADERS,"Frachtmarkt: (Wähle eine Ladung aus)",inhalt,"Annehmen","Abbrechen"); return 1; }
-
@Tusk Okay, dann habe ich noch eine Frage könnte ich es auch wie folgt machen?:
C
Alles anzeigenenum frachten{ fracht_name[128], fracht_gewicht,//Einheit Tonnen fracht_zielid, fracht_startid } new FrachtInfo[15][frachten] = { {"Reifen",10,2,3}, {"Alte Reifen",2,3}, {"Kunststoffe",3,2}, {"Alt-Benzin",26,2,3}, {"Alt-Öl",26,2,3}, {"Mehl",12,3,2}, {"Lebensmittel",21,3,2}, {"Metallteile",24,2,1}, {"Stahlträger",30,2,0}, {"Burgerfleisch",23,3,1}, {"Limmonade",26,3,2}, {"Karosserieteile",29,2,3}, {"Fernseher",16,3,1}, {"Elektrogeraete",27,3,2}, {"Spielzeug",13,3,1} };
Aber wie kann ich dann dort die Start und Ziel via. Random auslesen? (Bei "new FabrikInfo" wurden die Koordinaten der Firmen hinzugefügt.) -
Die Funktion "SelectRandomFabrik" gibt ja nur eine Abladefirma wieder aber es muss ja noch eine Startfirma geben also wo man die Frach abholen muss.
-
Okay, jetzt verstehe ich nur eine Sache noch nicht 100%ig, wenn ich jetzt als Bespiel Burgerfleisch annehmen würde, dann wäre der Zielort die Firmen die, die Id "3" haben. Okay bis dahin vertsehe ich alles. Aber der Startort? Und dann noch eine Frage wie lese ich das am besten mit der random Funktion aus?
Code momentan:
C
Alles anzeigennew FabrikInfo[8][Unternehmen] = { {0,"Schrottplatz Los Santos"}, {1,"Spielzeuglager Las Venturas"}, {2,"Werkstattlager San Fierro"}, {2,"Grotti Automobiellager Los Santos"}, {3,"Zwischenlager Los Santos"}, {3,"Zwischenlager Los Santos"}, {3,"Zwischenlager Las Venturas"}, {3,"Zwischenlager San Fierro"} }; new FrachtInfo[15][frachten] = { {"Reifen",10,2}, {"Alte Reifen",2}, {"Kunststoffe",3}, {"Alt-Benzin",26,2}, {"Alt-Öl",26,2}, {"Mehl",12,3}, {"Lebensmittel",21,3}, {"Metallteile",24,2}, {"Stahlträger",30,2}, {"Burgerfleisch",23,3}, {"Limmonade",26,3}, {"Karosserieteile",29,2}, {"Fernseher",16,3}, {"Elektrogeraete",27,3}, {"Spielzeug",13,3} };
-
Verknüpfe doch deine Definitionen sodass du einer Fracht direkt die Lieferpunkte zuteilst bzw. einordnest.Dann kannst du am Ende auch leichter dein rndm durchlaufen lassen und hast eines bessere Übersicht um dir die Daten zu entnehmen. weils nur 1 Reihe immer ist aus derdu etwas entnimmst.Erstmal danke, aber ich verstehe nicht genau wie du das meinst. Vielleicht liegt es auch an der Uhrzeit. Könntest du vielleicht ein Bespiel dazu machen, ich hoffe das ich es dan verstehe.//e:
Antwort siehe Tusk's Antwort. -
Weiß nicht, ob du es so meinst:
Nicht ganz
Wenn der Spieler in seinem LKW angenommen den Befehl "/ware" eintippt soll ihm ein Dialog angzeigt werden in dem folgendes enthalten ist:
Ladung: Reifen | Gewicht: 10t | Ladeort: Los Santos (Firma: Zischenlager Los Santos) | Abladeort: San Fierro (Firma: Autolager), Struktur:
Ladung: %s (random(...) | Gewicht: %d (FrachtInfo[Fracht per Random] ) | Ladeort: %s (random(Firma)) | Bestimmungsort: %s (random(firma2))Also um es nochmal deutlich zu erklären, wenn man den Befehl "ware" eintippt soll ein Dialog erscheinen der Automatisch eine Fracht per Zufallsprinzip auswählt, Einen Lade- und Abladeort auch per Zufallsprinzip (Fracht sollte aber einen Sinn ergeben, also damit meine ich das Reifen nicht vom Schrottplatz zum Spielzeuglager geliefert werden. )
Ich hoffe du verstehst jetzt wie ich es meine
Mit freundlichen Grüßen German_ScripterHD
-
Fragst beim einladen ab was er transportiert und gibst ihm aus wohin er kann.
Beim abliefern fragst du ihn ab was er transportiert und machst dann deine eingabe.Ich möchte die Aufträge später per Random Verfahren auswählen. Deswegen wird das so nicht klappen oder irre ich mich da?