Bei der Suche wird der Style der Vorschau in den Ergebnissen verwendet was den allgemeinen Syle bricht.
Reproduktion:
Search Filter News und irgendwas suchen!
Bei der Suche wird der Style der Vorschau in den Ergebnissen verwendet was den allgemeinen Syle bricht.
Reproduktion:
Search Filter News und irgendwas suchen!
Async MainThrad Helper Function
using GTANetworkAPI;
using System;
using System.Text;
using System.Threading.Tasks;
namespace MeinServer.Helper
{
public class Utils
{
public static async Task RunFromAsyncContext(Action action)
{
if (System.Threading.Thread.CurrentThread.ManagedThreadId == NAPI.MainThreadId)
{
action();
}
else
{
NAPI.Task.Run(action);
await NAPI.Task.WaitForMainThread();
}
}
}
}
Alles anzeigen
Nutzungs Beispiel:
Hier eine kleine Class um Strings mit einem Salt (Geheimen Schlüssel) zu verschlüsseln. Und nur mit Selbigem Salt lassen sich die Verschlüsselten Strings wieder entschlüsseln.
Es bietet zwar keine Maximale Sicherheit doch kann man damit beim Richtigen nutzen es erschweren Quellen zu offenbaren etc.
<?php
/*
* Copyright (c) 2021. BitDEVil2K16 Club. All rights reserved.
* @author BitDEVil2K16 (Sascha P.)
* @author BitDEVil2K16 Club <[email protected]>
* @author BitDEVil2K16 Club https://bitdevil2k16.club
* @github https://github.com/BitDEVil2K16
* @FileName: XOR.class.php
*
*/
class XOR2 {
private static function xor_encode( $data, $key ) {
for( $i = 0; $i < strlen($data); $i++ ) {
for( $j = 0; $j < strlen($key); $j++ ){
$data[$i] = $data[$i] ^ $key[$j];
}
}
return $data;
}
public static function decode($data, $key) {
return self::xor_encode(base64_decode($data), (string)$key);
}
public static function encode($data, $key): string
{
return base64_encode(self::xor_encode($data, (string)$key));
}
}
/* Nutzungs Beispiel */
$xor = new XOR2();
$stringtoenc = "https://bitdevil2k16.net/index";
$encode = $xor->encode($stringtoenc,time());
echo "String: ".$stringtoenc."<br />";
echo "Salt: ".time()."<br />";
echo "Encoded String: ".$encode."<br />";
echo "Decoded String: ".$xor->decode($encode,time());
Alles anzeigen
In dem Beispiel nutzen wir einfach die PHP Funktion time() als Salt bedeutet das der Encodierte String auch nur mit diesem UnixTimeStamp wieder decodiert werden kann!
Try It:
Viel Spaß damit!
2 Nette Funktionen die vielleicht der ein oder andere Gebrauchen kann
<?php
if(!function_exists('UintToInt')) {
/**
* @param $value
* @return int
*/
function UintToInt($value): int
{
if ($value > 2147483647) {
$value -= 4294967296;
}
return $value;
}
}
if(!function_exists('IntToUint')) {
/**
* @param $value
* @return int
*/
function IntToUint($value): int
{
if ($value < 2147483647) {
$value += 4294967296;
}
return $value;
}
}
Alles anzeigen
Nutzung:
<?php
$meieintzahl = -123456;
echo "Mein int $meieintzahl als uint " . IntToUint($meieintzahl); // return Mein int -123456 als uint 4294843840
Try it:
Man kennt es man hat ein schönes unasigned int wie zB. 1572865
Doch welche einzelnen Flags sind da genutzt?
Das lassen wir uns entweder von Codewalker beantworten oder aber nutzen PHP
PHP Code:
if (!function_exists('convertuinttobits')) {
/**
* @param $flag
* @return array
*/
function convertuinttobits($flag): array
{
$flags= array(); // Array initialisieren
for ($i = 0; $i <= 32; $i++) {
if ($flag & (1 << $i)) {
$flags[] = (1 << $i);
}
}
sort($flags); // Kurz mal das Array sortieren 1,2,3,4.....
return $flags; // zurück geben
}
}
Alles anzeigen
Und so funktioniert es ein kleines Beispiel:
<?php
if (!function_exists('convertuinttobits')) {
/**
* @param $flag
* @return array
*/
function convertuinttobits($flag): array
{
$flags= array(); // Array initialisieren
for ($i = 0; $i <= 32; $i++) {
if ($flag & (1 << $i)) {
$flags[] = (1 << $i);
}
}
sort($flags); // Kurz mal das Array sortieren 1,2,3,4.....
return $flags; // zurück geben
}
}
foreach (convertuinttobits(1572865) as $flag){
echo "Das Flag: $flag<br />";
}
Alles anzeigen
Die Ausgabe aus dem Beispiel würde so aussehen:
Jetzt bleibt mir nur noch zu sagen viel spaß damit für die Personen die damit was anfangen können!
//Edit:
Try it here:
Update4: Discord Role / Secure Bot hat sein neues zuhause gefunden und ist am Start. Somit sind alle Heutigen Umzüge Abgeschlossen!
Sorry für die eventuellen Unannehmlichkeiten. Und Downtimes!
Update3: TeamSpeak Bots auch wieder am Stissel
Update2: Teamspeak3 Server Umzug abgeschlossen, ip bleibt weiterhin: bitdevil2k16
Update: Mail Server A ist Trasferiert
Diskussion zum Artikel Server Wechsel Umzug:
ZitatEinige der V-Server werden umziehen in eine neue Location.Alles anzeigen
Das bedeutet es kann zu Einschränkungen kommen.
Betroffen sind folgende Dienste:
Public #Teamspeak
Mail Dienste
Einige Bots werden auch umziehen die Betreffen aber nur #Discord Dienste.
Im einzelnen kann es sein das es nicht Möglich ist sich hier zu Registrieren oder auch im Discord zu verifizieren, das gleiche Gilt auch für den Public Teamspeak.
Die Grunde für den Umzug sind die das der ein oder andere Anbieter einfach eine…
Diskussion zum Artikel Neuer Style:
ZitatDa derzeit die Style Welle umher geht machen wir das auch, der BitDEVil2K16 Club wechselt den Style
Weiterhin bleibt es Dark allerdings nicht mehr in Schwarz sondern wir setzten Blaue Akzente mit Dark Green und etwas Grau.
Viele werden es bereits gesehen haben daher nur mal eine kurze Um/Beschreibung warum wir das gemacht haben. Anscheinend ist es derzeit ein Trend siehe Windows10 Startleisten Context Menüs oder auch Discord alles bekommt Style Upgrades und wir haben uns entschieden dem zu…
Wie ich finde sehr nützlich und daher poste ich das mal hier!
Die JavaScript Side
function getData(what, cb)
{
const xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
if (typeof cb === "function") cb(xhr.responseText);
}
}
xhr.open("GET", "getdata.php?q="+what+"", true); //oder auch POST
xhr.send();
}
Alles anzeigen
Nun das PHP
<?php
//Zur Sicherheit könnte man noch Prüfen ob Constant X definiert ist
//defined('X') OR exit('No direct script access allowed');
$what = $_GET["q"]; // GET bei POST $_POST[x]
/*
Der Code zum Verarbeiten
*/
$newData = "Du hast nach " . $what . " gefragt";
echo $newData; //neue Daten zurück geben!
Fertig
Nun kann man das in JS nutzen um zB. MySQL daten mal fix ab zu Arbeiten!
<!-- Der standard Stuff Header/Head/ -->
<body>
<div id="content">Klick auf update</div>
<button onclick="updateData('test')">Update</button>
</body>
<script>
function updateData(what){
getData(what, (data) => {
var contentDiv = document.getElementById("content");
if (contentDiv){
contentDiv.innerHTML = data;
}
});
}
function getData(what, cb)
{
const xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
if (typeof cb === "function") cb(xhr.responseText);
}
}
xhr.open("GET", "getdata.php?q="+what+"", true); //oder auch POST
xhr.send();
}
</script>
Alles anzeigen
Viel Spaß damit falls es einer Braucht!
Seit dem 15.12.2020 gibt es die neue Heist Insel in GTA-V
Um diese auf der map zu sehen kann man folgendes Snipped verwenden
mp.events.add("render", () => {
mp.game.invoke("0xE81B7D2A3DAB2D81"); // void SET_RADAR_AS_EXTERIOR_THIS_FRAME() // 0xE81B7D2A3DAB2D81 0x39ABB10E // Das ganze als Exterior definieren
mp.game.ui.setRadarAsInteriorThisFrame(mp.game.joaat("h4_fake_islandx"), 4700.0, -5145.0, 0, 0);
});
Viel Spaß
Reproduzierbar: Ja
Schritte zur Reproduktion:
Bugtracker im Browser aufrufen (Desktop)
Die schriftfarben sollte man mal überdenken.
Diskussion zum Artikel ShowCase Server Update:
ZitatShowcase Server Update Dezember 2020Alles anzeigen
Kurz und knapp gesagt der Showcase-Server hat nun einen Loader der die neue Insel aus dem großen GTA-V Update für euch betretbar macht.
Auf der Insel kann man seine Partys starten, oder auch einfach mal nur auf Entdeckungsreise gehen.
Ich wünsche viel Spaß beim erkunden der Insel.
Ja genau man kennt es die Werbung nervt, aber diese Webseite und was dahinter läuft braucht ein wenig Support .
Es gibt aber gute Neuigkeiten
Personen die sich ein Kostenlosen Account erstellen und diesen Aktiviert haben werden keine groß aufdringliche Werbung mehr sehen!
Solltet ihr uns und unsere Projekte** dennoch unterstützen wollen könnt ihr das ganz unten auf der Seite über den PayPal Spenden Button tun.
Oder auch per Sub auf Twitch (Abo*) https://www.twitch.tv/bitdevil2k16/subscribe
bzw. Direkt hier auf der Webseite (Abo*) https://bitdevil2k16.club/paid-subscription-list/ was demnächst weiter ausgebaut wird und Vorteile Verschaffen könnte.
Kein Muss ihr seit auch so Herzlich eingeladen unsere Produkte zu nutzen oder auch Aktiv dran Teil zu nehmen zu Testen und Feedback oder Anregungen zu äußern. Besucht auch gerne unseren Discord Link findet ihr ganz unten auf der Seite bzw. auch in der Seitenleiste oder klickt einfach hier
Gerne könnt ihr auch unseren TS3 Server nutzen.
Fragen könnt ihr gerne hier im Forum oder auch auf dem Discord stellen.
*Abo ist fortlaufend kann aber jederzeit gekündigt werden
** Dabei handelt es sich um BitDEVil2K16 Club Projekte. (Webseite, Server, Sicherheit, Dienste, TS3 ...)
Vielen Dank und Happy Coding
Diskussion zum Artikel Werbung nervt?:
ZitatJa genau man kennt es die Werbung nervt, aber diese Webseite und was dahinter läuft braucht ein wenig Support .Alles anzeigen
Es gibt aber gute Neuigkeiten
Personen die sich ein Kostenlosen Account erstellen und diesen Aktiviert haben werden keine groß aufdringliche Werbung mehr sehen!
Solltet ihr uns und unsere Projekte** dennoch unterstützen wollen könnt ihr das ganz unten auf der Seite über den PayPal Spenden Button tun.
Oder auch per Sub auf Twitch (Abo*)…
Da ich jetzt des Öfteren auf das Problem gestoßen bin das immer mehr DB Leichen generiert wurden in dem Bereich beim Löschen von Entitys die Verknüpfungen erhielten werde ich hier nun einmal eine Lösung aufzeigen die das Problem bei mir Gelöst hat.
Ein kleines Beispiel zu dem Model
Ich habe eine Abstract Class die ich für all meine Datenbank Modelle nutze
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RageServer.Server.Models
{
public abstract class DbModel
{
[Key] //Das Löst schon mal das ein oder andere Problem Affected Row(1) vs 0
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
}
Alles anzeigen
Ein Beispiel Model mit einer Verknüpfung zu einem Anderen Model "foreign keys"
public class Person : DbModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual List<PersonalItems> Items { get; set; } // Erstellt in dem Model PersonalItems den FK
}
Constructor lassen wir mal weg sollte ja bekannt sein.
public class PersonalItems : DbModel
{
public int ItemID { get; set; }
public int Count { get; set; }
//FK PersonId
}
Wenn ich nun Feststelle das eines der Items in der List den Count = 0 erreicht möchte ich das aus meiner DB entfernt haben. Das mache ich wie folgt.
//Funktion aufrufen
private void RemoveItem(MeinObject obj, int Id, int ItemId, int Count)
{
using(var context = new DatabaseContext())
{
var person = context.Person.Include(x => x.Items).FirstOrDefault(y => y.Id == Id);
if (person != null){
var item = person.Items.FirstOrDefault(x => x.Id == ItemId);
item.Count -= Count;
if (item.Count<=0){
person.Items.Remove(item);
}
context.SaveChanges();
}
}
}
Alles anzeigen
Alles schön alles gut doch in der Datenbank sieht es danach nicht so aus es Geschieht nur Folgendes und zwar das der FK Also die PersonId zu einer NULL wird und somit ist das "Entity" zwar Tot aber noch immer in der Datenbank.
Um das Problem zu umgehen habe ich im meinem Context im Override von der Funktion OnModelCreating(ModelBuilder modelBuilder) eine Schleife eingebaut die den ForeignKeys die Meta Daten verändert und der Datenbank sagt wie sie sich zu verhalten hat beim Löschen.
Das Manuelle Setzten in der Datenbank selbst Funktioniert leider nicht Wirklich.
Aber genug gelabert hier die Lösung für das NULL Problem.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
foreignKey.DeleteBehavior = DeleteBehavior.Cascade;
}
base.OnModelCreating(modelBuilder);
}
Vielleicht Hilft es ja dem ein oder anderen EF Core Nutzer ebenfalls.
Viel Spaß und Happy Coding
Diskussion zum Artikel Infrastruktur Wechsel:
ZitatIn der Heutigen Nacht sind wir auf eine neue Struktur gewechselt!Alles anzeigen
Wir erhoffen uns damit weniger Latenz und konstante/Stabilere Verbindung. In der letzten zeit mussten wir leider Feststellen das es regelmäßig zu micro Verbindungsabbrüchen kam. Wir Hoffen das der wechsel zu einer neuen Infrastruktur keine Unannehmlichkeiten verursacht hat.
Es sollte nun alles wieder laufen sollten Fehler auftreten zögert nicht dies mit zu teilen, Als Antwort auf dieses Thema (Kommentar) oder in dem zu…
Die Idle Cam oder auch Cinematic Cam genannt die nach einer gewissen zeit Aktiv wird und ständig Schwingt kann man recht Simple Deaktivieren ich werde hier mal ein Code Snippet Veröffentlichen was euch Helfen wird die IDLE Cam zu Deaktivieren bzw den Idle Timer resetten das diese gar nicht erst Aktiv wird.
let IdleDate = new Date();
mp.events.add('render', () => {
const dif = new Date().getTime() - IdleDate.getTime();
const seconds = dif / 1000;
if (Math.abs(seconds) > 29.5) {
mp.game.invoke(`0xF4F2C0D4EE209E20`); //Clear Idle Timer
if (mp.players.local.vehicle)
mp.game.invoke(`0x9E4CFFF989258472`); //Clear InVehicle Idle Timer
IdleDate = new Date();
}
});
Alles anzeigen
Beschreibung der einzelnen Teile
Wir gehen in das Render Event (Tick Event) bei zB. 60 FPS wird dieses 60 mal pro Sekunde durchlaufen.
Aus diesem Grund erstellen wir ein Date was wir in dem Tick Event Prüfen ob es bereits die 29.5 Sekunden erreicht hat.
Warum 29.5 Sekunden? Das ist Recht Simple erklärt nach ca. 30 Sekunden setzt die IDLE Cam ein wir Resetten mit der Native 0xF4F2C0D4EE209E20 diesen Timer bei ca. 29.5 Sekunden das dieser wieder bei 0 ist und damit wird die IDLE Cam gar nicht erst Aktiviert im Gleichem zug setzten wir unser Date auf die Zeit wo wir den Timer resettet haben damit er nach weiteren ca. 29.5 Sekunden resettet wird.
Mehr gibt es da auch nicht wirklich zu sagen. Ich hoffe er Hilft euch beim Verwirklichen eurer Projekte. Sollten fragen sein Zögert nicht diese hier zu stellen!