Kennt sich hier jemand mit C intrisics aus?
Beiträge von Sub Royal
-
-
Alles anzeigen
Wieso auch immer man das wollen würde...die random Funktion tuts doch auch ganz gut xD
Naja, im Endeffekt kannst du diesen Block fast 1:1 übernehmen.
Das UL steht einfach nur für unsigned long (also positive 64 Bit Integer)
In Pawn gibt es nur 32 Bit Integer, aber sollte auch damit funktionieren.
Und diese ganzen anderen Operatoren (bis auf den ternary operator) sind einfach nur Bit-Shifting Operationen: https://forum.sa-mp.com/showthread.php?t=177523
Danke dir
Brauche kryptographisch verwertbare Zahlen bei meinem Accountsystem. -
Moin.
Versuche gerade Mersenne Twister in PAWN zu implementieren, scheiter jedoch noch an dem Block hier.
Wie kann man das hier anders Ausdrücken, und kann jemand kurz erläutern was diese Operationen hier genau machen?
Mit Präprozessorkram kenne ich mich leider nicht hinreichend aus.
Code#define MATRIX_A 0x9908b0dfUL /* constant vector a */ #define UMASK 0x80000000UL /* most significant w-r bits */ #define LMASK 0x7fffffffUL /* least significant r bits */ #define MIXBITS(u,v) ( ((u) & UMASK) | ((v) & LMASK) ) #define TWIST(u,v) ((MIXBITS(u,v) >> 1) ^ ((v)&1UL ? MATRIX_A : 0UL)) -
CPU Temperatur sieht verdächtig aus.
Dadurch einen NMI welcher den Kernel Panic auslöst.
-
Genial heh.
-
War ja klar, dass irgendwann die Lichter ausgehen, das Spiel hat ja mittlerweile auch einige Jahre auf dem Buckel
Naja so klar war das meiner Ansicht nach nicht.
Bestes Beispiel ist wohl OpenTTD, oder Civilization IV (Steam Version --> MP Server nun von Steam gehostet), welche auch wiederbelebt wurden.
-
War jetzt auch nicht sooooooooo überraschend
Das stimmt wohl, leider gibt es soviele dieser Leute welche wie ein untergehendes Schiff sind, und alles mitnehmen.
Hier mal der Thread:
https://forum.sa-mp.com/showthread.php?t=670043
Und entsprechende Posts von Kalcor:
-
Mich nervt es tierisch dass Kalcor nun wie ein untergehendes Schiff agiert, und alles um sich herum mit ins "Grab" nehmen will.
Egoismus pur.
Hat sonst noch jemand die ganze Aktion in dem "Is it still worth it" Thread im englischen SAMP Forum mitbekommen?
Hoffe jedenfalls das beste für OpenMP und würde auch tatkräftig unterstützen.
-
still geworden um OpenMP
-
Ich kann das auch bei mir hosten. Kostenlos.
Wie lange brauchst du den?
Schreib mal ne PM. -
Ein Schiffsbot wäre mal was!
-
Klingt super!
-
Wie realisiere ich am cleversten ein "Runden" System in einem Gamemode mit mehreren Minigames?
Weil bei einer Programmiersprache wie C oder PAWN wird sowas ja ziemlich sperrig, wenn ich in jedem public abfragen muss welcher Spielmodus aktuell aktiv ist, und ich dann immer fuer diesen Modus die Dinge definieren muss.
Undzwar ich habe folgendes.
Ich habe bspw. Spielmodi wie Deathmatch Rennen etc. und nachdem z.B. ein Deathmatch gespielt wurde, soll aus dem Pool der Minigames ein anderer ausgesucht werden, und dieser dann gestartet werden.
Bisher habe ich das ziemlich doof geloest indem ich halt fuer jeden Mode ein eigenes Script habe, was vermutlich einfacher ist.
Problem ist: Das Random aussuchen geht schwer, und der gmx ist ja auch nervig.Oder ist da der Weg ueber eine objektorientierte Sprache ueber APIs sinvoller?
-
Alles klar
Bin es nicht gewohnt sowas wie Makros zu nutzen -
-
Wieso? :o
Leider gibt es da doch Errors
Wuerde dann auch gerne die funktionierend SendMessageEx Funktion nutzen um das ganze bspw. fuer Dialoge und GameTexts als auch TextDraw Strings abzuwandeln.
Leider werde ich aus dem #emit Kram nicht schlau, kann man die Funktion denn auch mit format etc. ausdruecken? Das Problem ist ja irgendwie die Argumente hinten zu erfassen.Gibt es uebrigends auch die Moeglichkeit bei zcmd, bzw. izcmd sowas wie alias einzurichten?
So dass ich bspw. die Hilfe nicht einfach mit /ayuda aufmachen kann, sondern mit /ayuda /ajuda und /help, alles fuer den gleichen Befehl. -
Danke nochmal fuer die Makro Variante fuer das Sprachensystem.
Leider ist in diesem Fall doch eher eine andere Variante via Funktion gewuenscht.
Ich habe das mal so gemacht, interessanterweise reconnected der Spieler wenn das hier ausgefuehrt wird
Sowas habe ich vorher noch nicht geschafft.C
Alles anzeigenstock SendMessageEx(playerid, color, Language1[], Language2[] , Language3[], {Float, _}:...) { #define BYTECOUNT (cellbits / 8) if(playerid == -1) { for(new i; i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i)) continue; if(IsPlayerNPC(i)) continue; switch( player_Language[i] ) { case 0: //Language 1 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language1 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language1 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(i, color, message); } } case 1: //Language 2 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language2 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language2 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(i, color, message); } } case 2: //Language 3 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language3 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language3 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(i, color, message); } } } } } else { switch( player_Language[playerid] ) { case 0: //Language 1 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language1 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language1 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(playerid, color, message); } } case 1: //Language 2 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language2 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language2 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(playerid, color, message); } } case 2: //Language 3 { static const ARGC = 3; new n = (numargs() - ARGC) * BYTECOUNT; if (n) { new message[128], arg_start, arg_end; #emit CONST.alt Language3 #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LOAD.I #emit PUSH.pri arg_end -= BYTECOUNT; #emit LOAD.S.pri arg_end } while (arg_end > arg_start); #emit PUSH.S Language3 #emit PUSH.C 128 #emit PUSH.ADR message n += BYTECOUNT * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTECOUNT; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 return SendClientMessage(playerid, color, message); } } } } return true; } -
Welchen Kommandoprozessor koennt ihr als den besten empfehlen?

-
Absolut genial, ich danke dir
Das klappt prima. -
So ich stehe momentan vor folgender Schwierigkeit da ich mich mit #emit etc. nicht auskenne.
Ich will ein Script bisschen aufarbeiten indem ich das 2 sprachig mache.Ich habe da alles vollgeklatscht mit SendClientMessageEx.
Code
Alles anzeigenSendClientMessageEx(playerid, color, form[], {Float, _}: ...) { #pragma unused form static tmp[145] ; new t1 = playerid, t2 = color ; const n4 = -4, n16 = -16, size = sizeof tmp ; #emit stack 28 #emit push.c size #emit push.c tmp #emit stack n4 #emit sysreq.c format #emit stack n16 return (t1 == -1 ? (SendClientMessageToAll(t2, tmp)) : (SendClientMessage(t1, t2, tmp)) ); }Dann habe ich folgendes gefunden aus dem Multilanguage Tutorial.
Cstock SendMessage(playerid, colour, Language1[], Language2[]) { switch( player_Language[playerid] ) { case 0: { SendClientMessage(playerid, colour, Language1); } case 1: { SendClientMessage(playerid, colour, Language2); } } return true; }Wie kann ich beides kombinieren, so dass ich z.B. ein SendMessageEx habe, mit dem ich dann Daten sowohl in den Text von Sprache 1 als auch Sprache 2 packen kann? Kann da jemand was bauen?
z.B. sowas SendMessageEx(i, COLOR_WHITE, "%d joined the server","%d ha entrado al servidor",playerid); bzw, am besten das ganze noch fuer 3 Sprachen.