Du fragst in der Funktion nur den DamageType ab. Für das, was du machen willst, musst du checken ob der Damage durch einen Skill ausgelöst wurde.
Beiträge von Sogma
-
-
Habe alles wie vorgeschrieben implementiert, allerdings bekomme ich immer wieder die selbe Fehlermeldung.
Bitte melden Sie sich an, um diesen Anhang zu sehen.Bitte melden Sie sich an, um diesen Anhang zu sehen.2 Möglichkeiten, du hast app nicht importiert in dem Python File oder dir fehlt in der PythonApplicationModule.cpp (Client Src) der Export-Constant
-
Edit:
statt der AppendTextLine Funktion nutze ich jetzt self.AppendDescription wie bei der Beschreibung von dem Item. Damit sieht das gut aus!
Hi,
gibt es in den item Tooltips irgendeine Möglichkeit automatische Zeilenumbrüche bei langen Strings zu haben?
In der AddItemData Funktion füge ich eine neue Textline hinzu:
Der String ist definiert als:
Und ingame sieht das kacke aus...
Bitte melden Sie sich an, um diesen Anhang zu sehen.
-
Hi,
mir ging es gestern auf den Sack auf meiner FreeBSD VM ständig längere commands einzugeben, wie z.B. game/db kompilieren oder dann den Testserver zu satrten/stoppen.
Habe mir dafür dann jeweils aliases gebaut, die das Ganze vereinfachen, vielleicht ist das für den ein oder anderen hilfreich.
Ich arbeite bei mir lokal auf der VM immer mit dem root User, wenn ihr andere User habt müssen die aliases für diese angelegt werden.
Shell-Script: Alias anlegen- //Beispiel für Server starten, wenn das Script/der Pfad anders heißt entsprechend verändern
- echo "alias m2start 'cd /usr/home/game && sh start.sh'" >> /root/.cshrc
- //Beispiel für Server stoppen, wenn das Script/der Pfad anders heißt entsprechend verändern
- echo "alias m2stop 'cd /usr/home/game && sh close.sh'" >> /root/.cshrc
- //Beispiel für db clean
- echo "alias dbclean 'cd /usr/src/Server/db/src && gmake clean'" >> /root/.cshrc
- //Beispiel für db build
- echo "alias dbbuild 'cd /usr/src/Server/db/src && gmake -j4 >& ../LOG.txt'" >> /root/.cshrc
Nach dem Anlegen der aliases den Server rebooten oder mit dem Benutzer abmelden und neu anmelden, dann checken ob die aliases verfügbar sind:
Die erstellten/verfügbaren aliases sollten dort dann aufgeführt werden.
Nutzt ihr andere Shells als csh dann müssen die aliases in anderen Files gespeichert werden:
-
Die wird doch direkt in die Funktion mit übergeben.
Also window_type und slotindex sind zsm TITemPos
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
War gestern wohl zu spät, hab den Wald vor lauter Bäumen nicht gesehen. Danke dir!
-
Hey,
ich brauche für eine Anpassung in der Funktion def AddItemData im Python Part die Info, für welche TItemPos das ganze gerade passiert.
In dem gesamten item module finde ich dazu aber nichts passendes, hat jemand einen Vorschlag wie ich das machen kann?
ich kriege zwar den Index von dem Item, mir ist aber nicht ganz klar wie ich daraus eine ItemPos generieren kann.
Thx 4 help
-
Hört sich so an als würde die Änderung Client Side fehlen.
-
Irgendwer kommt da sowieso immer dran. Ob du nun irgendwas "verschlüsselst" oder auch nicht.
Es geht halt darum das nicht jeder heiopei daran kommt. Ich habs z.b bei der einen Exe nicht geschafft die Dateien zu entpacken.
Das lag ggf. daran, dass die ihre Pack Keys verändert haben? Das hilft in der Regel schon gegen die heiopeis
-
mmh dann kann ich wohl niemals releasen wenn ich nicht ansatzweise was verschlüsseln kann. Ich hatte früher ne tolle Datei, einfach alle Dateien rein ziehen und sie waren verschlüsselt. Leider weiß ich nicht mehr wie die Datei heißt und ich hab sie auch nicht mehr
Irgendwer kommt da sowieso immer dran. Ob du nun irgendwas "verschlüsselst" oder auch nicht.
-
FoxFS ist nur eine andere Methode zum Packen/Entpacken anstatt der regulären Vorgehensweise.
Wenn du FoxFS nutzt brauchst du keinen PML (soweit ich weiß). Irgendwo in deiner Implementation von FoxFS muss auch die Pack/Unpack Funktion geregelt, bzw. definiert sein.
Grundsätzlich ist FoxFS ohne weitere Anpassungen aber nicht sicherer als die Default Variante.
-
Achso das hab ich soweit gemacht. Wenn ich aber eine File Unpacken will über rechtsklick auf den Ordner bekomm ich ein log Ordner mit einer .dmp File mit Hieroglyphen und wenn ich packe scheint es verschlüsselt zu sein aber die .exe lässt sich nicht mehr starten.
Dann passen deine Keys nicht.
-
Bitte melden Sie sich an, um diesen Link zu sehen.
Da gibt es Infos.
Danke schon mal für die Antworten, das Tutorial kenn ich , hab ich aber nicht verstanden
Da müssten .reg (Registry) Files in dem Release sein. Die doppelklicken, dann wird deine registry angepasst dass das Tool über Rechtsklick auf Files/Ordner verwendet werden kann.
Dann zum entpacken Rechtsklick auf die jeweilige .eix Datei -> PML Unpack und zum Packen Rechtsklick auf den Ordner, den du vorher entpackt hast -> PML Pack.
-
heutzutage used man FoxFS oder whatever falls das verschlüsseln überhaupt noch was bringt
Gibts da ein tutorial zu wie das funktioniert? Ich verstehs nicht
Bitte melden Sie sich an, um diesen Link zu sehen.
Da gibt es Infos.
-
sehr nett. was seit jahren teuer verkauft(natürlich extendend mit ordentlichen cases) ist nun für die breite masse verfügbar.
Wusste gar nicht, dass sowas verkauft wird. Aber ja, es gibt bestimmt noch mehr was man in separate Threads verschieben kann oder will. Hoffe das gibt einen Einblick wie man es machen kann.
-
Hi,
habe gestern und heute ein bisschen gespielt und für den Client eine neue Library geschrieben die, in einem Hintergrund Thread vom M2 Client, Fileänderungen in Verzeichnissen erkennt und dann erstmal stumpf eine Log Datei schreibt.
bestimmt kann man damit noch mehr machen, aber da kann sich ja jeder was zu ausdenken.
Geht mir nur darum das Grundgerüst zu bieten.
-
localeInfo.py(line:191) LoadLocaleFile
Run - <type 'exceptions.UnboundLocalError'>:local variable 'lines' referenced before assignment
Da ist dein Problem.
Datei localeinfo.py Zeile 191.
Die Variable "lines" wird verwendet bevor ihr ein Wert zugewiesen wurde.
-
Ohne irgendeine Art von syserr/log ist das alles etwas schlechteres Glaskugel lesen. Sieht für mich aber stark nach einem Fehler aus den Python Scripts aus dem Client aus.
-
Ist das Item/die Vnum ggf. im Source hart hinterlegt, dass das beim Benutzen verschwindet unabhängig vom Type?
-
Oi,
bin gerade am basteln wegen eines Themas wofür ich Daten auf dem Server aus einer Json Datei lade und verarbeite (NPC Movement/Koordinaten/Wegpunkte).
Dabei kam mir die Idee, dass man sowas ja auch für z.B. mob_drop_item / common_drop_item / etc_drop_item benutzen könnte.
Bevor ich da jetzt zu viel Zeit rein investiere um das schick zu machen einmal ne kurze Umfrage ob da noch jemand Interesse dran hat. Falls nein dann mache ich das soweit wie es für mich funktioniert.
Habe schonmal einen Converter zum testen von mob_drop_item.txt zu mob_drop_item.json geschrieben, daher kann ich auch schon mal grob zeigen wie die Files dann aussehen würden.
Code- {
- "HungrigerWildhund": {
- "items": [
- {
- "iterator": "1",
- "vnum": "2000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "2",
- "vnum": "50",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "3",
- "vnum": "7010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "4",
- "vnum": "7000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "5",
- "vnum": "3000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "6",
- "vnum": "2020",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "7",
- "vnum": "1010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "8",
- "vnum": "7030",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "9",
- "vnum": "5000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "10",
- "vnum": "2010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "11",
- "vnum": "20",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "12",
- "vnum": "7020",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "13",
- "vnum": "10",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "14",
- "vnum": "30",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "15",
- "vnum": "5010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "16",
- "vnum": "3010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "17",
- "vnum": "11400",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "18",
- "vnum": "11200",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "19",
- "vnum": "11240",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "20",
- "vnum": "50007",
- "quantity": "1",
- "prob": "0.09"
- },
- {
- "iterator": "21",
- "vnum": "70104",
- "quantity": "1",
- "prob": "0.30"
- }
- ],
- "Type": "drop",
- "Mob": "171"
- },
- "Wildhund": {
- "items": [
- {
- "iterator": "1",
- "vnum": "269",
- "quantity": "1",
- "prob": "100"
- }
- ],
- "Type": "drop",
- "Mob": "101"
- },
- "HungrigerWolf": {
- "items": [
- {
- "iterator": "1",
- "vnum": "2000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "2",
- "vnum": "1000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "3",
- "vnum": "7000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "4",
- "vnum": "5000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "5",
- "vnum": "2010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "6",
- "vnum": "5010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "7",
- "vnum": "70104",
- "quantity": "1",
- "prob": "0.30"
- }
- ],
- "Type": "drop",
- "Mob": "172"
- }
- }
Finde es sinnvoll es so zu machen, man kann auch z.b. anstatt 0.30 30% erlauben und das mit nlohmann bauen sind vielleicht 30-40 zeilen
Code- void CBossDropSystem::LoadBossDropInfo(const std::string& path)
- {
- nlohmann::json x{};
- std::ifstream file(path);
- if (!file.is_open()) {
- sys_err("LoadBossDropInfo failed there is no file at %s ", path.c_str());
- return;
- }
- if (!m_bossDropInfo.empty())
- m_bossDropInfo.clear();
- try
- {
- nlohmann::json jsonData;
- file >> jsonData;
- std::shared_ptr<SBossDropInfoWrap> info;
- uint32_t race{};
- // Object should be a dict
- for (const auto& obj : jsonData) {
- if (obj.contains("vnum"))
- {
- race = obj["vnum"];
- }
- if (obj.contains("drops"))
- {
- info = std::make_shared<SBossDropInfoWrap>();
- if (obj.contains("count"))
- {
- info->count = obj["count"];
- }
- if (obj.contains("drops"))
- {
- for (const auto& drop : obj["drops"])
- {
- int32_t minDamage{};
- std::string type = drop["min_damage"].type_name();
- if (type == "string")
- {
- std::string d = drop["min_damage"];
- std::string searchStr = "k";
- std::string replaceStr = "000";
- std::size_t pos = 0;
- while ((pos = d.find(searchStr, pos)) != std::string::npos) {
- d.replace(pos, searchStr.length(), replaceStr);
- pos += replaceStr.length();
- }
- searchStr = "K";
- pos = 0;
- while ((pos = d.find(searchStr, pos)) != std::string::npos) {
- d.replace(pos, searchStr.length(), replaceStr);
- pos += replaceStr.length();
- }
- minDamage = std::stoi(drop["min_damage"].get<std::string>());
- }
- else
- minDamage = drop["min_damage"];
- std::string dropType = drop["prob"].type_name();
- double prob = 0.0f;
- if (dropType == "string")
- prob = parseProbability(drop["prob"].get<std::string>());
- else
- prob = drop["prob"];
- info->drops.push_back({ minDamage , drop["vnum"], drop["count"], prob });
- info->drops.back().sortPoint = getOrDefault(drop, "sortpoint", 0);
- }
- std::sort(info->drops.begin(), info->drops.end(), [](const SBossDropInfo& a, const SBossDropInfo& b)
- {
- return a.sortPoint > b.sortPoint;
- });
- }
- }
- if (info != nullptr)
- m_bossDropInfo[race] = info;
- }
- file.close();
- }
- catch (std::exception& e)
- {
- sys_err("Failed to parse config %s", e.what());
- }
CodeSo hab ich das für ein System von mir wobei das laden auch nicht so schön ist
Jo die nlohmann Implementation nutze ich auch. Schaue mir das nachher mal an was du da gemacht hast, finde die Idee mit yaml aber auch charmant
-
Oi,
bin gerade am basteln wegen eines Themas wofür ich Daten auf dem Server aus einer Json Datei lade und verarbeite (NPC Movement/Koordinaten/Wegpunkte).
Dabei kam mir die Idee, dass man sowas ja auch für z.B. mob_drop_item / common_drop_item / etc_drop_item benutzen könnte.
Bevor ich da jetzt zu viel Zeit rein investiere um das schick zu machen einmal ne kurze Umfrage ob da noch jemand Interesse dran hat. Falls nein dann mache ich das soweit wie es für mich funktioniert.
Habe schonmal einen Converter zum testen von mob_drop_item.txt zu mob_drop_item.json geschrieben, daher kann ich auch schon mal grob zeigen wie die Files dann aussehen würden.
Code- {
- "HungrigerWildhund": {
- "items": [
- {
- "iterator": "1",
- "vnum": "2000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "2",
- "vnum": "50",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "3",
- "vnum": "7010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "4",
- "vnum": "7000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "5",
- "vnum": "3000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "6",
- "vnum": "2020",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "7",
- "vnum": "1010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "8",
- "vnum": "7030",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "9",
- "vnum": "5000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "10",
- "vnum": "2010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "11",
- "vnum": "20",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "12",
- "vnum": "7020",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "13",
- "vnum": "10",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "14",
- "vnum": "30",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "15",
- "vnum": "5010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "16",
- "vnum": "3010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "17",
- "vnum": "11400",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "18",
- "vnum": "11200",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "19",
- "vnum": "11240",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "20",
- "vnum": "50007",
- "quantity": "1",
- "prob": "0.09"
- },
- {
- "iterator": "21",
- "vnum": "70104",
- "quantity": "1",
- "prob": "0.30"
- }
- ],
- "Type": "drop",
- "Mob": "171"
- },
- "Wildhund": {
- "items": [
- {
- "iterator": "1",
- "vnum": "269",
- "quantity": "1",
- "prob": "100"
- }
- ],
- "Type": "drop",
- "Mob": "101"
- },
- "HungrigerWolf": {
- "items": [
- {
- "iterator": "1",
- "vnum": "2000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "2",
- "vnum": "1000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "3",
- "vnum": "7000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "4",
- "vnum": "5000",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "5",
- "vnum": "2010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "6",
- "vnum": "5010",
- "quantity": "1",
- "prob": "0.10"
- },
- {
- "iterator": "7",
- "vnum": "70104",
- "quantity": "1",
- "prob": "0.30"
- }
- ],
- "Type": "drop",
- "Mob": "172"
- }
- }