Funktionieren tut alles so weit sieht auch gut aus jetzt hab ich allerdings Probleme mit dem letzten Feinschliff.
Vorab da es sich ja nicht nur um Metin2 handelt sondern eigentlich um Python,
ja ich habe es absichtlich in diese Sektion geschrieben, nehmts mir nicht übel. Da vl die Pserver-Leute eher verstehen was ich meine (denke ich)hab
ich´s hier rein geschrieben. Ansonsten bitte verschieben und nicht löschen
So nun das Problem:
Die Bonuspage hab ich auf die Taste F5 gelegt.
PHP Code:
onPressKeyDict[app.DIK_F5] = lambda : self.__PressF5Key()
PHP Code:
def __PressF5Key(self):
import uibonuspage
self.uibonuspage = uibonuspage.BonusBoardDialog()
Desweiteren kann ich, wenn ich wieder F5 drücke unendlich viele Bonuspages öffnen
Bild:
Ich würde das jetzt gerne so haben, dass beim ersten drücken der Taste F5 das Bonusboard geöffnet wird und beim zweiten drücken wieder geschlossen wird. Und beim Drücken von Esc soll es auch geschlossen werden. (also so wie bei c --> Charakter).
Hier noch die uibonuspage.py (Alle (C)Copyrights(C) bei DaRealFreak)
PHP Code:
#!/usr/bin/python
# -*- coding: latin-1 -*-
import ui
import chat
import app
import player
import snd
import item
import net
class BonusBoardDialog(ui.ScriptWindow):
MaxBoni = { "1": 16000, "2": 320, "3": 32, "4": 32, "5": 32, "6": 32, "7": 16, "9": 40, "10": 60, "11": 60, "12": 16, "13": 24, "14": 16, "15": 30, "16": 30, "17": 50, "18": 100, "19": 100, "20": 100, "21": 100, "22": 100, "23": 20, "24": 40, "27": 15, "28": 30, "29": 72, "30": 72, "31": 72, "32": 72, "33": 72, "34": 72, "35": 60, "36": 60, "37": 40, "38": 60, "39": 20, "41": 10, "43": 60, "44": 60, "45": 40, "48": 1, "53": 50 }
BonusDict = ["PvP Boni", "PvM Boni", "Andere"]
BonusIDListe = [["", 0, 0],["Max. TP", 1, 0],["Max. MP", 2, 0],["Vitalität", 3, 0],["Intelligenz", 4, 0],["Stärke", 5, 0],["Ausweichwert", 6, 0],["Angriffsgeschwindigkeit", 7, 0],["Bewegungsgeschwindigkeit", 8, 0],["Zaubergeschwindigkeit", 9, 0],["TP-Regeneration", 10, 32],["MP-Regeneration", 11, 33],["Vergiftungschance", 12, 37],["Ohnmachtschance", 13, 38],["Verlangsamungschance", 14, 39],["Kritischer Treffer", 15, 40],["Durchbohrender Treffer", 16, 41],["Stark ggn Halbmenschen", 17, 43],["Stark ggn Tiere", 18, 44],["Stark ggn Orks", 19, 45],["Stark ggn Esoterische", 20, 46],["Stark ggn Untote", 21, 47],["Stark ggn Teufel", 22, 48],["TP-Absorbierung", 23, 63],["MP-Absorbierung", 24, 64],["Chance auf Manaraub", 25, 65],["Chance MP-Regeneration", 26, 66],["Nahkampf-Angriff blocken", 27, 67],["Pfeilangriff ausweichen", 28, 68],["Schwertverteidigung", 29, 69],["Zweihandverteidigung", 30, 70],["Dolchverteidigung", 31, 71],["Glockenverteidigung", 32, 72],["Fächerverteidigung", 33, 73],["Pfeilwiderstand", 34, 74],["Feuerwiderstand", 35, 75],["Blitzwiderstand", 36, 76],["Magieverteidigung", 37, 77],["Windverteidigung", 38, 78],["Nahkampftreffer reflektieren", 39, 79],["Fluch reflektieren", 40, 80],["Giftverteidigung", 41, 81],["Chance MP wiederherzustellen", 42, 82],["Exp-Bonus", 43, 83],["Yang-Drop", 44, 84],["Item-Drop", 45, 85],["steigernde Trankwirkung", 46, 86],["Chance TP wiederherzustellen", 47, 87],["Immun gegen Ohnmacht", 48, 88],["Immun gegen Verlangsamung", 49, 89],["Immun gegen Stürzen", 50, 90],["APPLY_SKILL", 51, 0],["Pfeilreichweite", 52, 95],["Angriffswert", 53, 0],["Verteidigungswert", 54, 96],["Magischer Angriffswert", 55, 97],["Magischer Verteidigungswert", 56, 98],["", 57, 0],["Max. Ausdauer", 58, 0],["Stark gegen Krieger", 59, 54],["Stark gegen Ninjas", 60, 55],["Stark gegen Suras", 61, 56],["Stark gegen Schamanen", 62, 57],["Stark gegen Monster", 63, 53],["Itemshop Angriffswert", 64, 114],["Itemshop Verteidigungswert", 65, 115],["Itemshop Exp-Bonus", 66, 116],["Itemshop Item-Bonus", 67, 117],["Itemshop Yang-Bonus", 68, 118],["APPLY_MAX_HP_PCT", 69, 119],["APPLY_MAX_SP_PCT", 70, 120],["Fertigkeitsschaden", 71, 121],["Durchschn. Schaden", 72, 122],["Fertigkeitsschaden Widerstand", 73, 123],["Durchschn. Schadenswiderstand", 74, 124],["", 75, 0],["iCafe EXP-Bonus", 76, 125],["iCafe Item-Bonus", 77, 126],["Abwehr ggn Krieger", 78, 59],["Abwehr ggn Ninjas", 79, 60],["Abwehr ggn Suras", 80, 61],["Abwehr ggn Schamanen", 81, 62]]
SpecialBoni = { 1: "Norm.State", 2: "Norm.State", 3: "Norm.State", 4: "Norm.State", 5: "Norm.State", 6: "Norm.State", 55: "Norm.State", 56: "Norm.State", 58: "Norm.State" }
PvPOffenseBoni = ["Stark ggn Halbmenschen", "Kritischer Treffer", "Durchbohrender Treffer", "Durchschn. Schaden", "Fertigkeitsschaden", "Vitalität", "Intelligenz", "Stärke", "Ausweichwert", "Zaubergeschwindigkeit"]
PvPDefenseBoni = ["Schwertverteidigung", "Zweihandverteidigung", "Dolchverteidigung", "Glockenverteidigung", "Fächerverteidigung", "Pfeilwiderstand", "Pfeilangriff ausweichen", "Magieverteidigung", "Nahkampf-Angriff blocken", "Immun gegen Ohnmacht"]
PvMOffenseBoni = ["Stark gegen Monster", "Stark ggn Teufel", "Stark ggn Untote", "Stark ggn Tiere", "Stark ggn Orks", "Stark ggn Esoterische", "Ohnmachtschance", "Vergiftungschance", "Angriffsgeschwindigkeit", "Angriffswert"]
PvMDefenseBoni = ["Max. TP", "Max. MP", "Nahkampf-Angriff blocken", "TP-Regeneration", "MP-Regeneration", "TP-Absorbierung", "MP-Absorbierung", "Exp-Bonus", "Yang-Drop", "Item-Drop"]
LeftoversOffenseBoni = ["Stark gegen Krieger", "Stark gegen Ninjas", "Stark gegen Suras", "Stark gegen Schamanen"]
LeftoversDefenseBoni = ["Abwehr ggn Krieger", "Abwehr ggn Ninjas", "Abwehr ggn Suras", "Abwehr ggn Schamanen", ]
BonusList = []
UI = []
TestSystem = 0
ProcessTimeStamp = 0
def __init__(self):
ui.ScriptWindow.__init__(self)
self.LoadUI()
def __del__(self):
ui.ScriptWindow.__del__(self)
self.Board.Hide()
def LoadUI(self):
self.Board = ui.BoardWithTitleBar()
self.Board.SetSize(313, 420)
self.Board.SetCenterPosition()
self.Board.AddFlag("movable")
self.Board.AddFlag("float")
self.Board.SetTitleName("BonusBoard by DaRealFreak for Zephion")
self.Board.SetCloseEvent(self.__del__)
self.Board.Show()
Vertical = ui.Line()
Vertical.SetParent(self.Board)
Vertical.SetPosition(8, 60)
Vertical.SetSize(297, 0)
Vertical.SetColor(0xff777777)
Vertical.Show()
self.UI.append(Vertical)
x = 25
for i in xrange(3):
ChangeBonusDict = ui.Button()
ChangeBonusDict.SetParent(self.Board)
ChangeBonusDict.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
ChangeBonusDict.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
ChangeBonusDict.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
ChangeBonusDict.SetText(self.BonusDict[i])
ChangeBonusDict.SetPosition(x, 380)
ChangeBonusDict.SetEvent(lambda arg = ChangeBonusDict.GetText(): self.ChangeBonusDict(arg))
ChangeBonusDict.Show()
x += 88
self.UI.append(ChangeBonusDict)
x = 55
Type = ["Offensiv", "Defensiv"]
for i in xrange(2):
BonusDescription = ui.TextLine()
BonusDescription.SetParent(self.Board)
BonusDescription.SetPosition(x, 35)
BonusDescription.SetText(str(Type[i]))
BonusDescription.SetFontColor(1.0, 0.63, 0)
BonusDescription.Show()
x += 150
self.UI.append(BonusDescription)
self.SetBoni(self.BonusDict[0])
self.dict = self.BonusDict[0]
def SetBoni(self, type):
Offense = [[25, 70], [25, 100], [25, 130], [25, 160], [25, 190], [25, 220], [25, 250], [25, 280], [25, 310], [25, 340]]
Defense = [[170, 70], [170, 100], [170, 130], [170, 160], [170, 190], [170, 220], [170, 250], [170, 280], [170, 310], [170, 340]]
for bonus in self.BonusIDListe:
if type == self.BonusDict[0]:
self.CheckBonus(bonus, self.PvPOffenseBoni, Offense)
self.CheckBonus(bonus, self.PvPDefenseBoni, Defense)
elif type == self.BonusDict[1]:
self.CheckBonus(bonus, self.PvMOffenseBoni, Offense)
self.CheckBonus(bonus, self.PvMDefenseBoni, Defense)
elif type == self.BonusDict[2]:
self.CheckBonus(bonus, self.LeftoversOffenseBoni, Offense)
self.CheckBonus(bonus, self.LeftoversDefenseBoni, Defense)
else:
return
def CheckBonus(self, bonus, bonuslist, offset):
for boni in bonuslist:
if bonus[0] == boni:
try:
Index = bonuslist.index(boni)
BonusDescription = ui.TextLine()
BonusDescription.SetParent(self.Board)
BonusDescription.SetPosition(offset[Index][0], offset[Index][1])
BonusDescription.SetText(str(bonus[0]))
BonusDescription.Show()
BonusSlotBar = ui.SlotBar()
BonusSlotBar.SetParent(self.Board)
BonusSlotBar.SetSize(115, 15)
BonusSlotBar.SetPosition(offset[Index][0], offset[Index][1] + 15)
BonusSlotBar.Show()
BonusAttrLine = ui.TextLine()
BonusAttrLine.SetParent(self.Board)
BonusAttrLine.SetPosition(offset[Index][0] + 5, offset[Index][1] + 15)
try:
Type = self.SpecialBoni[bonus[1]]
Attribute = self.EquipAttribute(bonus)
except:
Attribute = player.GetStatus(int(bonus[2]))
if self.TestSystem != 1:
BonusAttrLine.SetText(str(Attribute))
try:
if int(Attribute) >= int(self.MaxBoni[str(bonus[1])]):
BonusAttrLine.SetFontColor(1.0, 0.63, 0)
else:
BonusAttrLine.SetFontColor(1, 1, 1)
except:
BonusAttrLine.SetFontColor(1, 1, 1)
else:
BonusAttrLine.SetText("Test system is active")
BonusAttrLine.SetFontColor(0.1, 0.7, 1.0)
BonusAttrLine.Show()
self.BonusList.append([BonusDescription, BonusAttrLine, BonusSlotBar])
except:
pass
def EquipAttribute(self, bonus):
value = 0
for slot in xrange(90, 101):
for attr in xrange(0, 7):
attr, val = player.GetItemAttribute(slot, attr)
if int(attr) == bonus[1]:
value += int(val)
return int(value)
def ChangeBonusDict(self, dict):
self.dict = dict
for bonus in self.BonusList:
try:
for array in bonus:
array.Hide()
except:
pass
self.SetBoni(dict)
def OnUpdate(self):
import item
if int(app.GetTime()) > int(self.ProcessTimeStamp) + 6:
self.SetBoni(self.dict)
self.ProcessTimeStamp = app.GetTime()
PHP Code:
BonusBoardDialog().Show()
Wäre cool wenn mir Jemand bei dem Problem helfen könnte.
MfG blackbanana







