<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[struct mitloggen und vergleichen]]></title><description><![CDATA[<p>Huhu!<br />
Wir sind ne kleine Gruppe von Freelancer Spielern die nur ein wenig Ahnung von C++ haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Trotzdem haben wir bisjetzt einige Anti Cheat Features zusammenbasteln können.</p>
<p>Als nächstes steht ein &quot;Speed&quot; und &quot;Refire Rate&quot; detect an.</p>
<p>Da der Speed eines Players und die refire rate einer Waffe nicht direkt mitgeliefert wird, haben wir damit zu unsere probs.</p>
<p>Wenn ein Player mit einer Waffe schießt wird das hier ausgelöst:</p>
<pre><code>void __stdcall FireWeapon(unsigned int iClientID, struct XFireWeaponInfo const &amp;wpn)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    try {
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }

    Server.FireWeapon(iClientID, wpn);
}
</code></pre>
<p>Zu XFireWeapon gibt es noch das hier:</p>
<pre><code>struct XFireWeaponInfo
{
    uint iDunno1;
    Vector vDirection;
    uint iDunno2;
    short *sArray1;
    short *sArray2;
    short *s3;
};
</code></pre>
<p>Wie könnte ich jetzt z.B. mitloggen, was mir XFireWeapon sagt und wenn ich darin die refire rate gefunden habe, sie dann später im Code vergleichen.. Also z.B. iRefireRate &gt; 20</p>
<p>-------------------------------------------------------------</p>
<p>Und wenn ich gleich dabei bin, hau ich das mit dem Speed detect noch gleich hinterher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Beim fliegen gibt es 3 Funktionen die Aufgerufen werden können.<br />
Ich denke mal, dass es in der Funktion steht, die aufgerufen wird, wenn das Schiff sich bewegt.<br />
Das sieht wie folgt aus:</p>
<pre><code>void __stdcall SPObjUpdate(struct SSPObjUpdateInfo const &amp;ui, unsigned int iClientID)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    Server.SPObjUpdate(ui, iClientID);

    try {
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }
}
</code></pre>
<p>SSPObjUpdateInfo:</p>
<pre><code>struct SSPObjUpdateInfo
{
    float f[9];
    uint i;
};
</code></pre>
<p>Ich hoffe ihr könnt mir helfen.</p>
<p>Gruß<br />
Crazy</p>
<p>Edit: Ich habs jetzt mal so probiert:</p>
<pre><code>void __stdcall FireWeapon(unsigned int iClientID, struct XFireWeaponInfo const &amp;wpn)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    try {
    wstring wscCharname = Players.GetActiveCharacterName(iClientID);

[B]    HkAddCheaterLog(wscCharname, [U]XFireWeaponInfo[/U], L&quot;Fireweapon LOG&quot;);[/B]
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }

    Server.FireWeapon(iClientID, wpn);
}
</code></pre>
<p>Dabei kommt folgender Fehler:<br />
error C2275: 'XFireWeaponInfo': Ungültige Verwendung dieses Typs als Ausdruck</p>
<p>Habe auch folgendes versucht:<br />
XFireWeaponInfo::iDunno1</p>
<p>Dann kommt:<br />
error C2597: Ungültiger Verweis auf nicht-statischen Member 'XFireWeaponInfo::iDunno1'</p>
<p>Mit:<br />
XFireWeaponInfo::sArray1<br />
Kommt der gliche Fehler.</p>
<p>Mit wenig erfolg^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147020/struct-mitloggen-und-vergleichen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 01:50:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147020.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 May 2006 23:12:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Fri, 12 May 2006 23:12:35 GMT]]></title><description><![CDATA[<p>Huhu!<br />
Wir sind ne kleine Gruppe von Freelancer Spielern die nur ein wenig Ahnung von C++ haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Trotzdem haben wir bisjetzt einige Anti Cheat Features zusammenbasteln können.</p>
<p>Als nächstes steht ein &quot;Speed&quot; und &quot;Refire Rate&quot; detect an.</p>
<p>Da der Speed eines Players und die refire rate einer Waffe nicht direkt mitgeliefert wird, haben wir damit zu unsere probs.</p>
<p>Wenn ein Player mit einer Waffe schießt wird das hier ausgelöst:</p>
<pre><code>void __stdcall FireWeapon(unsigned int iClientID, struct XFireWeaponInfo const &amp;wpn)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    try {
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }

    Server.FireWeapon(iClientID, wpn);
}
</code></pre>
<p>Zu XFireWeapon gibt es noch das hier:</p>
<pre><code>struct XFireWeaponInfo
{
    uint iDunno1;
    Vector vDirection;
    uint iDunno2;
    short *sArray1;
    short *sArray2;
    short *s3;
};
</code></pre>
<p>Wie könnte ich jetzt z.B. mitloggen, was mir XFireWeapon sagt und wenn ich darin die refire rate gefunden habe, sie dann später im Code vergleichen.. Also z.B. iRefireRate &gt; 20</p>
<p>-------------------------------------------------------------</p>
<p>Und wenn ich gleich dabei bin, hau ich das mit dem Speed detect noch gleich hinterher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Beim fliegen gibt es 3 Funktionen die Aufgerufen werden können.<br />
Ich denke mal, dass es in der Funktion steht, die aufgerufen wird, wenn das Schiff sich bewegt.<br />
Das sieht wie folgt aus:</p>
<pre><code>void __stdcall SPObjUpdate(struct SSPObjUpdateInfo const &amp;ui, unsigned int iClientID)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    Server.SPObjUpdate(ui, iClientID);

    try {
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }
}
</code></pre>
<p>SSPObjUpdateInfo:</p>
<pre><code>struct SSPObjUpdateInfo
{
    float f[9];
    uint i;
};
</code></pre>
<p>Ich hoffe ihr könnt mir helfen.</p>
<p>Gruß<br />
Crazy</p>
<p>Edit: Ich habs jetzt mal so probiert:</p>
<pre><code>void __stdcall FireWeapon(unsigned int iClientID, struct XFireWeaponInfo const &amp;wpn)
{
    ISERVER_LOG();
    ISERVER_LOGARG_UI(iClientID);

    try {
    wstring wscCharname = Players.GetActiveCharacterName(iClientID);

[B]    HkAddCheaterLog(wscCharname, [U]XFireWeaponInfo[/U], L&quot;Fireweapon LOG&quot;);[/B]
    } catch(...) { AddLog(&quot;Exception in %s&quot;, __FUNCTION__); }

    Server.FireWeapon(iClientID, wpn);
}
</code></pre>
<p>Dabei kommt folgender Fehler:<br />
error C2275: 'XFireWeaponInfo': Ungültige Verwendung dieses Typs als Ausdruck</p>
<p>Habe auch folgendes versucht:<br />
XFireWeaponInfo::iDunno1</p>
<p>Dann kommt:<br />
error C2597: Ungültiger Verweis auf nicht-statischen Member 'XFireWeaponInfo::iDunno1'</p>
<p>Mit:<br />
XFireWeaponInfo::sArray1<br />
Kommt der gliche Fehler.</p>
<p>Mit wenig erfolg^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056841</guid><dc:creator><![CDATA[DrCrazy]]></dc:creator><pubDate>Fri, 12 May 2006 23:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Fri, 12 May 2006 23:14:38 GMT]]></title><description><![CDATA[<p>Sry, hab mich wohl verklickt.</p>
<p>Der Beitrag gehört ins C++ Forum. Sorry nochmal (auch für den Doppelpost :D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056843</guid><dc:creator><![CDATA[DrCrazy]]></dc:creator><pubDate>Fri, 12 May 2006 23:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Sat, 13 May 2006 11:00:30 GMT]]></title><description><![CDATA[<p>Bei der XFireWeaponInfo blick ich nicht ganz durch, was denn da was sein könnte. Aber das liegt wohl daran, dass ich Freelancer nich kenn.<br />
So wie ich das sehe, steht in XFireWeaponInfo keine maximale firerate drin. Also wäre eine Möglichkeit, dass du die zeit zwischen 2 schüssen eines clients misst und falls die zeit unter eine bestimmte grenze fällt, das dann mitloggen kannst/den cheater kicken/... kannst. Ich denke, dass die bestimmt schon irgendwo irgendeine Zeitklasse haben, die man dann für diese Zwecke gebrauchen kann.</p>
<p>Zu dem Speed:<br />
das &quot;float f[9]&quot; sieht sehr stark nach irgendeiner richtung/matrix aus. wie genau das array aber aufgebaut is, kann ich nicht sagen, das musst du entweder in der doku nachlesen, oder ausprobieren. also einfach mal in eine richtung fliegen und alle werte loggen. Und um da eine Geschwindigkeitsbegrenzung hinzukriegen, musst du wieder dir der Zeit behelfen.</p>
<p>Zu deinen Fehlern:<br />
XFireWeaponInfo ist wie der Compiler schon sagt ein Typ(Struktur). Sie sagt nur was darüber aus, wie die daten nachher im speicher angelegt werden, wenn man davon ein <strong>Objekt</strong> erstellt. Du kannst dir eine Struktur als eine Art Plan vorstellen, den der Architekt vor sich hat. Und die Bauarbeiter sind dann diejenigen, die nach diesem Plan ein (oder viele) Häuser bauen.</p>
<p>Also als Lösung solltest du &quot;wpn&quot; an &quot;HkAddCheaterLog(..)&quot; übergeben. Also in etwa so:</p>
<pre><code class="language-cpp">HkAddCheaterLog(wscCharname, wpn, L&quot;Fireweapon LOG&quot;);
</code></pre>
<p>Falls HkAddCheaterLog aber als 2. Parameter keine Variable vom Typ XFireWeaponInfo zulässt, bleibt dir wohl nix anderes übrig, als alle Elemente der Struktur einzeln aufzulisten:</p>
<pre><code class="language-cpp">HkAddCheaterLog(wscCharname, wpn.iDunno1, L&quot;Fireweapon LOG&quot;);
HkAddCheaterLog(wscCharname, wpn.vDirection, L&quot;Fireweapon LOG&quot;); //Auch hier kanns Probleme geben, weil Vector wiederum ein eigener Typ ist (wie XFireWeaponInfo)
.
.
.
</code></pre>
<p>Und noch ne Frage: Bezieht sich dieser Code auf den Client oder den Server? Das Server.FireWeapon() lässt vermuten, dass das ein Client-Code ist. Aber da würde es recht wenig bringen den Code reinzuverfrachten, da so jeder, der das Spiel spielt erstmal die neu compilierte Version besitzen müsste.<br />
Und bedenke auch: Bei jedem Schuss, oder gar bei jedem Bewegunsupdate etwas in eine Textdatei zu schreiben, kann ganz schön an der Performance ziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056971</guid><dc:creator><![CDATA[cin]]></dc:creator><pubDate>Sat, 13 May 2006 11:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Sat, 13 May 2006 11:59:33 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=759" rel="nofollow">CMatt</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=28" rel="nofollow">C# und .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057006</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 13 May 2006 11:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Sat, 13 May 2006 20:42:11 GMT]]></title><description><![CDATA[<p>Dieser Code läuft im Server mit.</p>
<p>Es wird eine DLL erzeugt die dann diese Sachen im Speicher hookt.</p>
<p>Wir wollen nicht jeden Schuss mitloggen, wir müssen nur erstmal herausfinden, wo überhaupt die refire rate drin steht.</p>
<p>Deswegen wollen wir testweise alles mitloggen.<br />
Nur leider klappt das nicht.</p>
<p>Wenn ich:</p>
<pre><code class="language-cpp">HkAddCheaterLog(wscCharname, wpn);
</code></pre>
<p>HkAddCheaterLog sieht so aus:</p>
<pre><code class="language-cpp">bool HkAddCheaterLog(wstring wscCharname, wstring wscReason)
{
	FILE *f = fopen((scAcctPath + &quot;flhook_cheaters.log&quot;).c_str(), &quot;at&quot;);
	if(!f)
		return false;

	CAccount *acc = HkGetAccountByCharname(wscCharname);
	wstring wscAccountDir;
	HkGetAccountDirName(acc, wscAccountDir);

	time_t tNow = time(0);
	struct tm *stNow = localtime(&amp;tNow);
	fprintf(f, &quot;%.2d/%.2d/%.4d %.2d:%.2d:%.2d Possible cheating detected (%s) by %s(%s)(%s)\n&quot;, stNow-&gt;tm_mon + 1, stNow-&gt;tm_mday, stNow-&gt;tm_year + 1900, stNow-&gt;tm_hour, stNow-&gt;tm_min, stNow-&gt;tm_sec, wstos(wscReason).c_str(), wstos(wscCharname).c_str(), wstos(wscAccountDir).c_str(), wstos(HkGetAccountID(acc)).c_str());
	fclose(f);
	return true;
}
</code></pre>
<p>Und:</p>
<pre><code class="language-cpp">bool HkAddCheaterLog(wstring wscCharname, wstring wscReason);
</code></pre>
<p>error C2664: 'HkAddCheaterLog': Konvertierung des Parameters 2 von 'const XFireWeaponInfo' in 'std::wstring' nicht möglich</p>
<p>Wenn ich nun ein HkAddCheaterLog2 erstelle was so aussieht:</p>
<pre><code class="language-cpp">bool HkAddCheaterLog2(const XFireWeaponInfo);
</code></pre>
<p>Und:</p>
<pre><code class="language-cpp">bool HkAddCheaterLog2(const XFireWeaponInfo)
{
	FILE *f = fopen((scAcctPath + &quot;flhook_cheaters2.log&quot;).c_str(), &quot;at&quot;);
	if(!f)
		return false;

	return true;
}
</code></pre>
<p>Dann kommt kein Fehler, die Log Datei wird auch erstellt, aber es steht nichts drin. (Der Code ganz oben habe ich natürch auf:</p>
<pre><code class="language-cpp">HkAddCheaterLog2(wpn);
</code></pre>
<p>Ich denke in bool HkAddCheaterLog2(const XFireWeaponInfo) müssen noch n paar Infos rein, aber da weiß ich nciht, was ich da rein schreiben soll^^</p>
<p>e:\Games\FL\Hook\1.5.5\source\HkCbIServerImpl.cpp(239): error C2664: 'HkAddCheaterLog': Konvertierung des Parameters 2 von 'const XFireWeaponInfo' in 'std::wstring' nicht möglich</p>
<p>Edit:<br />
Zum Speed:<br />
We kann ich denn die Arrays mitloggen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057283</guid><dc:creator><![CDATA[DrCrazy]]></dc:creator><pubDate>Sat, 13 May 2006 20:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to struct mitloggen und vergleichen on Sun, 14 May 2006 09:44:03 GMT]]></title><description><![CDATA[<p>Wie habt ihr es mit so wenigen C (oder C++, hier egal)-Kenntnissen geschafft so weit zu kommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057438</guid><dc:creator><![CDATA[dragon90#]]></dc:creator><pubDate>Sun, 14 May 2006 09:44:03 GMT</pubDate></item></channel></rss>