Beiträge von StreetFight

    Code
    1. self.PopupMessage(self, localeInfo.REFINE_FAIL_3_TEST, len(localeInfo.REFINE_FAIL_3_TEST) )

    Mein Fehler das self gehört da nicht hin, habe das on the Fly geschrieben.

    Code
    1. self.PopupMessage(localeInfo.REFINE_FAIL_3_TEST, len(localeInfo.REFINE_FAIL_3_TEST) )

    Du musst den Text aber splitten um mit len(text) zu arbeiten so nimmt er ja die gesamte länge des textes.


    würde zwei einträger machen in der localeInfo:


    Code
    1. REFINE_FAILED_TEXT = "Die Veredelung ist fehlgeschlagen."
    2. ITEM_DESTROYED_TEXT = "Der Gegenstand wurde zerstört."
    Code
    1. self.PopupMessage(localeInfo.REFINE_FAILED_TEXT + localeInfo.ITEM_DESTROYED_TEXT, len(localeInfo.REFINE_FAILED_TEXT))

    ;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(


    Code
    1. self.PopupMessage(self, localeInfo.DERERSTETEXT + localeInfo.DERZWEITETEXT, len(localeInfo.DERERSTETEXT) )


    msg ist deine message


    EDIT:


    um es hardgecoded zu schreiben


    self.PopupMessage("Die Veredelung ist fehlgeschlagen. Der Gegenstand wurde zerstört.", len("Die Veredelung ist fehlgeschlagen."))


    der erste Parameter ist die Message der zweite ab wie vielen zeichen er einen Umbruch machen soll.

    Ahhhh! Ich verstehe! Das teste ich morgen, danke für den Anstoß:)

    in networkmodule.py


    in class PopupDialog(ui.ScriptWindow):


    ändern zu


    und dann in der game.py

    Code
    1. def PopupMessage(self, msg):
    2. self.stream.popupWindow.Close()
    3. self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK)

    ändern zu

    Code
    1. def PopupMessage(self, msg, textLineMax = 0):
    2. self.stream.popupWindow.Close()
    3. self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK, textLineMax)


    und dann so verwenden

    self.PopupMessage(self, msg, len(localeInfo.DERERSTETEXT) )


    Ist nicht die schönste Variante aber die schnellste zum schreiben direkt ins Forum und die kürzeste.

    Das Ding ist ja, Popup selbst ist definiert in der game.py


    Code
    1. def PopupMessage(self, msg):
    2. self.stream.popupWindow.Close()
    3. self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK)


    Das sieht dann so aus, das teste ich dann morgen, sollte aber, wenn ich das so sehe, klappen, Danke. ^^ Muss aber jetzt zur Arbeit. :)

    Nein das funktioniert so nicht du instanzierst eine neue textline die weiß nichts von deiner popupmessage die textline muss in den dialog eingebaut werden den die popupmessage instanziert.

    das ist ein laufzeit fehler so musst du das schreiben.

    Code
    1. def PopupMessage(self, text):
    2.         self.textline = ui.TextLine()
    3.         self.textline.SetText(text)
    4. self.textline.SetFontName(localeInfo.UI_DEF_FONT)
    5.         self.textline.SetMultiline()
    6.         self.textline.SetLimitWidth(15)
    7. self.textline.SetPosition(0, 15

    In der Popupmessage function gehört außerdem mehr rein nur eine textline bringt nicht viel gehört noch ein board with titlebar.

    Wahrscheinlich wird dort uiCommon.xyz aufgerufen dann muss man entweder eine neue Klasse schreiben oder die parameter dort optional machen und durchschleifen.

    dachte du wärst so ein python pro.


    ich würd mal in deiner PopupMessage funktion folgendes machen:

    textline.SetMultiline()

    textline.SetLimitWidth(50)

    Die 50 wirst du wahrscheinlich anpassen müssen.


    Wie man im C++ code sehen kann rendert er dann alles über 50 auf einer neuen Zeile.


    Freitag gut gemeint aber das bezieht sich drauf das man den code auf mehreren zeilen aufsplitten kann^^

    Code
    1. when kill with not npc.is_pc() and pc.get_map_index() == DEIN_MAP_INDEX and npc.get_race() == DEINE_GWÜNSCHTE_MOB_VNUM begin
    2.     local newKillCount = pc.getqf("killcounter") + 1
    3.      pc.setqf("killcounter", newKillCount )
    4.     if newKillCount == DEINE_GEWÜNSCHTE_KILL_ANZAHL
    5.         syschat(string.format("du hast %s bereits %d mal getötet", npc.get_name(), newKillCount))
    6.     end
    7. end

    so ungefähr, hab das grad on the fly geschrieben bin mir also nicht sicher ob alles funktioniert so wies soll.

    Würde dir empfehlen den index deiner bonis nicht ales key zu verwenden sondern als ersten tabellen eintrag also so :


    Code
    1. local waffen = {
    2. {3, "Vit", 12},
    3. {4, "Int", 12},
    4. {5, "Str", 12},
    5. {6, "Dex", 12},

    Danach brauchst du für die select3 eine Tabelle wo nur die Namen drin stehen diese kannst du statisch machen oder du baust sie zur Laufzeit zussammen so:


    Code
    1. local selectNames = {}
    2. for _,value in pairs(waffen) do
    3. table.insert(selectNames, value)
    4. end

    dann stehen in selectNames die ganzen Namen und danach brauchst du sie nur noch der select3 funktion übergeben und mit dem return wert in waffen indizieren.

    ungefähr so:

    Code
    1. local selectedBoni = waffen [select3(selectNames)]
    2. local boniIndex = selectedBoni [1]
    3. local boniName = selectedBoni [2]
    4. local boniCount = selectedBoni [3]

    Hab das ganze nicht getestet und lange kein Lua mahr gecoded aber sollte gehen.

    Code
    1. if npc.get_race() == mob1 and counter1 < kill then
    2. pc.setqf("counter1", counter1 + 1)
    3. chat("Du hast bereits: " .. pc.getqf("counter1") .. " Wildhund/e getötet.")
    4. elseif npc.get_race() == mob2 and counter2 < kill then
    5. pc.setqf("counter2", counter2 + 1)
    6. chat("Du hast bereits: " .. pc.getqf("counter2") .. " Wolf/Wölfe getötet.")
    7. end

    Du musst die If Abfragen richtig setzen, sonst läuft er durch wenn eine Abfrage geklappt hat.

    Meine Quests sehen zwar aus wie Kot aber funktionieren im Endeffekt.. Bsp:

    Keine Scheu den Danke Btn zu hauen :)=

    Du solltest dir wirklich Gedanken über deine Variablennamen machen wobei hier ja garnicht alles Variablen sind sondern auch Konstanten.

    Code Kopien sind auch immer schlecht für sowas gibts funktionen oder Tabellen.

    Nachdem du aus nicht bekanntlichen Gründen Änderungen am Server auf FreeBSD durchführst würde ich dir empfehlen mit GDB einen breakpoint an die Gewünschte stelle zu setzen, den game99 core im gdb debugger starten und bei der letzten statue einfach durch steppen und dann siehst du schon woran es liegt.


    Du kannst den gdb debugger normalerweiße auch an einen Laufenden Prozess anhängen.


    Wenn du nicht weißt wie das geht gibt es hier ein Tut dazu :

    Bitte melden Sie sich an, um diesen Link zu sehen.


    Wenn du merkst das, dass sub optimal ist würde ich dir empfehlen deine Server Entwicklungen auf Visual Studio unter windows durchzuführen dort ist das eine Arbeit von 1 Minute habe selbst in diesem Anfänger Code alle Fehler gefixxt.

    Why you are not using something like this?


    Because its incorrect :D

    If You use std::find the correct way is this


    Code
    1. static constexpr const char* arListMembers[] = {
    2. "[SA]Tibetan",
    3. "[SA]Ayana",
    4. "[GF]Twigo",
    5. "[GM]NaNo"
    6. };
    7. return std::find(std::begin(arListMembers), std::end(arListMembers), ch->GetName()) != std::end(arListMembers);

    Because std::find returns an iterator not an boolean.

    no need for unnecessary if else

    Woran scheitert es denn ? Du kannst es ja mal selbst versuchen und dich gegebenfalls bei mir melden.

    Falls du damit meinst das sie nach der verwendung nicht verschwinden, würde ich einfach in char_item.cpp in der ranzigen und langen funktion UseItemEx die vnum heraussuchen und das Item->SetCount(Item->GetCount() - 1) löschen.