|
You last visited: Today at 06:09
Advertisement
[(Zwangs-)Release] Achievementshop
Discussion on [(Zwangs-)Release] Achievementshop within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
04/18/2014, 15:31
|
#16
|
elite*gold: 222
Join Date: Oct 2012
Posts: 2,361
Received Thanks: 3,388
|
Quote:
Originally Posted by .ShiZunA™
Uhh neuer Beef ! boah hört bitte auf den Thread jetzt mit dem Beef voll zu Spammen ! DANKE
|
Tut mir leid, wenn ich das jetzt sage.. Aber mir kommts so vor, ob du die wiedergeburt von Incredible bist.
------------
Schade, dass es public war.
|
|
|
04/18/2014, 15:58
|
#17
|
elite*gold: 90
Join Date: Jan 2014
Posts: 162
Received Thanks: 25
|
Quote:
Originally Posted by [iRemix]
Könnt ihr nicht woanders flamen?
Haben soweit erstmal alles mit He3o geklärt und 'ne closerequest ist bereits raus - also lasst es gut sein.
|
Würde gern Archi Shop haben
|
|
|
04/18/2014, 16:07
|
#18
|
elite*gold: 0
Join Date: Sep 2013
Posts: 491
Received Thanks: 675
|
Die Frage ist ja wer für einen Archivementshop 50€ zahlt.
|
|
|
04/18/2014, 16:26
|
#19
|
elite*gold: 26
Join Date: Oct 2011
Posts: 1,262
Received Thanks: 1,064
|
Quote:
Originally Posted by Kơɾơ
die .He3o crew
sind schon 3 armselige kleine Kinder
war klar das die wieder so was machen
schade ums system
|
Was bist du eig. für einer?
Du kennst keinen von uns und Urteilst einfach so über uns.
Nichts gegen dich aber ich mein das du uns nicht beurteilen kannst da du uns nicht kennst. Eigentlich fast schon eine Frechheit oder?
Nun noch zum Thema Exodius.
Die Features von Exodius liegen nicht offen -> Woher sollen wir wissen ob ein solches System bei Exodius existiert oder nicht.
Wir haben nix mit Souli am Hut und haben auch kein Problem.
.. just sayin.
|
|
|
04/18/2014, 19:56
|
#20
|
elite*gold: 0
Join Date: Aug 2009
Posts: 1,178
Received Thanks: 184
|
Wer die Quest haben möchte bitte Pn an mich.
|
|
|
04/18/2014, 20:01
|
#21
|
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,448
|
Ja, die Quest ist ohne das Clientzeug sehr effetiv.
Da würde ich auch zugreifen.
Kann jetzt mal geschlossen werden?
Bei guten Threads sind Mods immer sofort zur Stelle um sie zu closen.
Wenn man seinen eigenen Thread zu haben will, muss man tagelang warten.
|
|
|
04/18/2014, 20:18
|
#22
|
elite*gold: 50
Join Date: Aug 2012
Posts: 535
Received Thanks: 284
|
Quote:
Originally Posted by [iRemix]
Ja, die Quest ist ohne das Clientzeug sehr effetiv.
Da würde ich auch zugreifen.
Kann jetzt mal geschlossen werden?
Bei guten Threads sind Mods immer sofort zur Stelle um sie zu closen.
Wenn man seinen eigenen Thread zu haben will, muss man tagelang warten.
|
Dazu muss man sagen, dass eine PN an einen Mod sehr effektiv ist, am besten an Zevion, der ist normal am aktivsten und reagiert innert Minuten.
|
|
|
04/18/2014, 21:30
|
#23
|
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,448
|
Ist wieder drin, da manche anscheinend versuchen wollten, den zu verkaufen mit meinem How To.
|
|
|
04/18/2014, 22:03
|
#24
|
Trade Restricted
elite*gold: 0
Join Date: Jun 2013
Posts: 1,332
Received Thanks: 535
|
Quote:
Originally Posted by [iRemix]
Ist wieder drin, da manche anscheinend versuchen wollten, den zu verkaufen mit meinem How To.
|
Jup, Lieber Releasen anstatt das Kinder es weiter Verkaufen " hab 5 in Skype " sage keinen Namen die wissen schon was ich meine
|
|
|
04/18/2014, 22:33
|
#25
|
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,938
|
Mir ging es hier vorallem ums HowTo, der Shop an sich ist in einem anderen Forum public, allerdings nur mit schlechter/keiner Erklärung.
Danke dir für dieses Release, mittlerweile sind ja alle "guten" Python Sachen public, schade eigentlich.
Ich denke, dass ich über die Leute, die es zu verkaufen versuchen, kein Wort verlieren muss.
Fehler:
Quote:
0418 23:26:13561 :: invalid idx 0
0418 23:26:20787 :: GRANNY: r:/granny/rt/granny_file_info.cpp(145): File has run-time type tag of 0x8000000f, which doesn't match this version of Granny (0x80000010). Automatic conversion will be attempted.
0418 23:27:25103 ::
uiInventory.py(line:297) __LoadWindow
ui.py(line:2721) GetChild
InventoryWindow.LoadWindow.BindObject - <type 'exceptions.KeyError'>:'Premium'
0418 23:27:25103 :: ================================================== ================================================== ========
0418 23:27:25103 :: Abort!!!!
0418 23:27:25103 :: filename=exception.py, name=Abort
0418 23:27:25103 :: filename=uiInventory.py, name=__LoadWindow
0418 23:27:25103 :: filename=uiInventory.py, name=__init__
0418 23:27:25103 :: filename=interfaceModule.py, name=__MakeWindows
0418 23:27:25103 :: filename=interfaceModule.py, name=MakeInterface
0418 23:27:25103 :: filename=game.py, name=__init__
0418 23:27:25103 :: filename=networkModule.py, name=SetGamePhase
0418 23:27:25104 :: filename=prototype.py, name=RunApp
0418 23:27:25104 :: filename=prototype.py, name=<module>
0418 23:27:25104 :: filename=system.py, name=Run
0418 23:27:25104 :: filename=system.py, name=execfile
0418 23:27:25104 :: filename=system.py, name=RunMainScript
0418 23:27:25104 :: filename=system.py, name=<module>
0418 23:27:25104 :: filename=<string>, name=<module>
|
Zeile 297 in uiinventory:
self.wndPremium = self.GetChild("Premium")
|
|
|
04/19/2014, 07:07
|
#26
|
elite*gold: 0
Join Date: Oct 2012
Posts: 111
Received Thanks: 1
|
Nice, can somebody create screenshots? Thx
Quote:
Originally Posted by [iRemix]
Hallo,
ich release mal den Achievementshop.
Erstmal die Quest:
Code:
quest achievement begin
state start begin
function get_points()
return tonumber(mysql_query("select achievement from player.player where id = ".. pc.get_player_id() ..";")[1][1]) or 0
end
function GetInput(value)
cmdchat("GetInputStart")
local ret = input(cmdchat(value))
cmdchat("GetInputStop")
return ret
end
function set_points(p)
mysql_query("update player.player set achievement = ".. p .." where id = ".. pc.get_player_id() ..";")
end
when 20095.chat."Achievementshop" begin
cmdchat("SetIsNpc")
npc.open_shop(49)
setskin(NOWINDOW)
cmdchat("SetPrice 100|100|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0")
end
when login begin
cmdchat("SetQuestIndex "..q.getcurrentquestindex())
cmdchat("setPP "..pc.getqf("achievement"))
loop_timer("update", 4)
if pc.getqf("first") == 0 then
pc.setqf("achievement", pc.getqf("achievement")+10)
cmdchat("achievement Dein_erster_Login%".. pc.getqf("achievement"))
pc.setqf("first",1)
end
end
when update.timer begin
cmdchat("setPP "..pc.getqf("achievement"))
end
when button or info begin
local items = {
[1]={19, 1, 100},
[2]={29, 1, 100},
[3]={39, 1, 100},
}
local slot = tonumber(achievement.GetInput("GetInput"))+1
if pc.getqf("achievement") >= items[slot][3] then
pc.setqf("achievement", pc.getqf("achievement")-items[slot][3])
cmdchat("setPP "..pc.getqf("achievement"))
pc.give_item2(items[slot][1], items[slot][2])
else
cmdchat("NieMamPP")
end
end
when kill with not npc.is_pc() and pc.getqf(npc.get_race()) == 0 begin
local data = {
[101] = 5,
[1095] = 100,
[691] = 10,
}
local v = npc.get_race()
local killcount = pc.getqf(v .."_kill")
local p = data[v] or 1000
cmdchat("setachieve ".. pc.getqf("achievement") + p)
cmdchat("achievement ".. mob_name(v) .."_getötet#".. killcount + 1 .."%".. pc.getqf("achievement") + p .."")
pc.setqf("achievement", pc.getqf("achievement") + data[v])
end
end
end
(Es sind auch Ansätze von den Mobs etc zum Killen drin)
Es ist wichtig, dass bei der dieser Stelle:
Code:
cmdchat("SetPrice 100|100|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0")
Die ganze Zahlenreihe vorhanden ist - wenn es nicht so viele Items gibt, einfach eine 0 beim Rest eintragen.
Bei der Stelle:
Code:
local items = {
[1]={19, 1, 100},
[2]={29, 1, 100},
[3]={39, 1, 100},
}
Stehen die Items für den Shop.
Aufbau:
[slot] = {vnum, count, kosten}
Zum Clientteil:
Öffnet die inventorywindow.py und ersetzt den Inhalt damit:
Code:
import uiScriptLocale
import item
EQUIPMENT_START_INDEX = 90
window = {
"name" : "InventoryWindow",
## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)
"x" : SCREEN_WIDTH - 176,
"y" : SCREEN_HEIGHT - 37 - 589,
"style" : ("movable", "float",),
"width" : 176,
"height" : 589,
"children" :
(
## Inventory, Equipment Slots
{
"name" : "board",
"type" : "board",
"style" : ("attach",),
"x" : 0,
"y" : 0,
"width" : 176,
"height" : 595,
"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),
"x" : 8,
"y" : 7,
"width" : 161,
"color" : "yellow",
"children" :
(
{ "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" },
),
},
## Equipment Slot
{
"name" : "Equipment_Base",
"type" : "image",
"x" : 10,
"y" : 33,
"image" : "d:/ymir work/ui/equipment_bg_without_ring.tga",
"children" :
(
{
"name" : "EquipmentSlot",
"type" : "slot",
"x" : 3,
"y" : 3,
"width" : 150,
"height" : 182,
"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
## »õ ¹ÝÁö1
##{"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32},
## »õ ¹ÝÁö2
##{"index":item.EQUIPMENT_RING2, "x":75, "y":106, "width":32, "height":32},
## »õ º§Æ®
{"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32},
),
},
## Dragon Soul Button
{
"name" : "DSSButton",
"type" : "button",
"x" : 114,
"y" : 107,
"tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL,
"default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga",
"over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga",
"down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga",
},
# Anti Exp Button
{
"name" : "AEButton",
"type" : "button",
"x" : 74,
"y" : 107,
"tooltip_text" : "Erfahrung deaktivieren",
"default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga",
"over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga",
"down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga",
},
## MallButton
{
"name" : "MallButton",
"type" : "button",
"x" : 118,
"y" : 148,
"tooltip_text" : uiScriptLocale.MALL_TITLE,
"default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga",
},
## CostumeButton
{
"name" : "CostumeButton",
"type" : "button",
"x" : 78,
"y" : 5,
"tooltip_text" : uiScriptLocale.COSTUME_TITLE,
"default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga",
},
{
"name" : "Equipment_Tab_01",
"type" : "radio_button",
"x" : 86,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Equipment_Tab_02",
"type" : "radio_button",
"x" : 86 + 32,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
),
},
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",
"x" : 10,
"y" : 33 + 191,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",
"x" : 10 + 78,
"y" : 33 + 191,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",
"x" : 8,
"y" : 246,
"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,
"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},
{
"name":"Money_Slot",
"type":"button",
"x":8,
"y":28+24,
"horizontal_align":"center",
"vertical_align":"bottom",
"default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"children" :
(
{
"name":"Money_Icon",
"type":"image",
"x":-18,
"y":2,
"image":"d:/ymir work/ui/game/windows/money_icon.sub",
},
{
"name" : "Money",
"type" : "text",
"x" : 3,
"y" : 3,
"horizontal_align" : "right",
"text_horizontal_align" : "right",
"text" : "123456789",
},
),
},
## Print
{
"name":"Premium_Slot",
"type":"button",
"x":8,
"y":28,
"horizontal_align":"center",
"vertical_align":"bottom",
"default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"children" :
(
{
"name":"Premium_Icon",
"type":"image",
"x":-18,
"y":2,
"image":"d:/ymir work/ui/game/windows/money_icon.sub",
},
{
"name" : "Premium",
"type" : "text",
"x" : 3,
"y" : 3,
"horizontal_align" : "right",
"text_horizontal_align" : "right",
"text" : "123456789",
},
),
},
),
},
),
}
Nun öffnet die game.py und sucht nach servercommandlist
In die Liste das einfügen:
Code:
"GetInputStart" : self.GetInputStart,
"GetInputStop" : self.GetInputStop,
"GetInput" : self.GetInput,
"SetQuestIndex" : self.QuestIndexShop,
"SetIsNpc" : self.SetIsNpc,
"SetPrice" : self.SetIsPrice,
"NieMamPP" : self.NieMamPP,
"setPP" : self.__setAchievementPoints,
Unter die Liste das einfügen:
Code:
def NieMamPP(self):
import uiShop
self.wndShop = uiShop.ShopDialog()
self.wndShop.NieMamPP()
def __setAchievementPoints(self, points):
constInfo.ACHIEVEMENT_POINTS = int(points)
self.interface.wndInventory.UpdatePremiumInSlot()
def SetIsPrice(self, value):
self.interface.dlgShop.SetShopPrice(value)
def SetIsNpc(self):
constInfo.IsItemShop = 1
def QuestIndexShop(self, value):
constInfo.IS_QUEST = int(value)
def GetInputStart(self):
constInfo.INPUT_IGNORE = 1
def GetInputStop(self):
constInfo.INPUT_IGNORE = 0
def GetInput(self):
net.SendQuestInputStringPacket(str(constInfo.INPUT_DATA))
In die constinfo.py das einfügen:
Code:
ACHIEVEMENT_POINTS = 0
IS_QUEST = 0
IsItemShop = 0
INPUT_IGNORE = 0
INPUT_DATA = ""
Dann in der uitooltip.py nach der Funktion def SetShopItem suchen - diese löschen und das einfügen:
Code:
def CutMoneyString(self, sourceText, startIndex, endIndex, insertingText, backText):
sourceLength = len(sourceText)
if sourceLength < startIndex:
return backText
text = sourceText[max(0, sourceLength-endIndex):sourceLength-startIndex]
if not text:
return backText
if int(text) <= 0:
return backText
text = str(int(text))
if backText:
backText = " " + backText
return text + insertingText + backText
def NumberToMoneyString(self, number):
if number <= 0:
return "0 Yang"
number = str(number)
result = self.CutMoneyString(number, 0, 4, "", "")
result = self.CutMoneyString(number, 4, 8, "¸¸", result)
result = self.CutMoneyString(number, 8, 12, "¾ï", result)
result = result + " Yang"
return result
def SetShopItem(self, slotIndex, addprice = 0, waltype = 0):
import locale
itemVnum = shop.GetItemID(slotIndex)
if 0 == itemVnum:
return
price = shop.GetItemPrice(slotIndex)
self.ClearToolTip()
self.isShopItem = TRUE
item.SelectItem(itemVnum)
metinSlot = []
for i in xrange(player.METIN_SOCKET_MAX_NUM):
metinSlot.append(shop.GetItemMetinSocket(slotIndex, i))
attrSlot = []
for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
attrSlot.append(shop.GetItemAttribute(slotIndex, i))
self.AddItemData(itemVnum, metinSlot, attrSlot)
if waltype == 0:
self.AppendPrice(price)
else:
self.AppendSpace(5)
self.AppendTextLine("Kosten: %s A-Punkte" % (self.NumberToMoneyString(addprice)[:-5]), self.SPECIAL_TITLE_COLOR)
Dann die uiinventory.py öffnen und die Funktion def RefreshStatus suchen.
Dadrunter das einfügen:
Code:
def UpdatePremiumInSlot(self):
import constInfo
value = str(constInfo.ACHIEVEMENT_POINTS)
self.wndPremium.SetText(str(constInfo.ACHIEVEMENT_POINTS) + " A-Punkte")
Dann in der gleichen Datei nach self.wndMoneySlot = 0 suchen und das dadrunter einfügen:
Code:
self.wndPremium = 0
self.wndPremiumSlot = 0
Dann nach self.wndMoneySlot = self.GetChild("Money_Slot") suchen und das dadrunter einfügen:
Code:
self.wndPremium = self.GetChild("Premium")
self.wndPremiumSlot = self.GetChild("Premium_Slot")
Dann nach der Funktion def SelectEmptySlot suchen, diese löschen und das einfügen:
Code:
def SelectEmptySlot(self, selectedSlotPos):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
return
selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)
if mouseModule.mouseController.isAttached():
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
if player.SLOT_TYPE_INVENTORY == attachedSlotType:
itemCount = player.GetItemCount(attachedSlotPos)
attachedCount = mouseModule.mouseController.GetAttachedItemCount()
self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)
if item.IsRefineScroll(attachedItemIndex):
self.wndItem.SetUseMode(FALSE)
elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
mouseModule.mouseController.RunCallBack("INVENTORY")
elif player.SLOT_TYPE_SHOP == attachedSlotType:
if constInfo.IsItemShop == 0:
net.SendShopBuyPacket(attachedSlotPos)
else:
import uiShop
self.wndShop = uiShop.ShopDialog()
self.wndShop.BuyFromIS(attachedSlotPos)
elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:
if player.ITEM_MONEY == attachedItemIndex:
net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")
else:
net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)
elif player.SLOT_TYPE_MALL == attachedSlotType:
net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)
mouseModule.mouseController.DeattachObject()
Dann die uishop.py öffnen, den kompletten Inhalt löschen und das einfügen:
Code:
import net
import player
import item
import snd
import shop
import net
import wndMgr
import app
import chat
import ui
import uiCommon
import mouseModule
import locale
import constInfo
import event
###################################################################################################
## Shop
class ShopDialog(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.tooltipItem = 0
self.xShopStart = 0
self.yShopStart = 0
self.questionDialog = None
self.popup = None
self.itemBuyQuestionDialog = None
self.shopPrice = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
def __del__(self):
ui.ScriptWindow.__del__(self)
def Refresh(self):
getItemID=shop.GetItemID
getItemCount=shop.GetItemCount
setItemID=self.itemSlotWindow.SetItemSlot
for i in xrange(shop.SHOP_SLOT_COUNT):
itemCount = getItemCount(i)
if itemCount <= 1:
itemCount = 0
setItemID(i, getItemID(i), itemCount)
wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
def SetShopPrice(self, arg):
slots = arg.split("|")
for i in xrange(40):
self.shopPrice[i] = int(slots[i])
def SetItemData(self, pos, itemID, itemCount, itemPrice):
shop.SetItemData(pos, itemID, itemCount, itemPrice)
def LoadDialog(self):
try:
PythonScriptLoader = ui.PythonScriptLoader()
PythonScriptLoader.LoadScriptFile(self, "UIScript/shopdialog.py")
except:
import exception
exception.Abort("ShopDialog.LoadDialog.LoadObject")
try:
GetObject = self.GetChild
self.itemSlotWindow = GetObject("ItemSlot")
self.btnBuy = GetObject("BuyButton")
self.btnSell = GetObject("SellButton")
self.btnClose = GetObject("CloseButton")
self.titleBar = GetObject("TitleBar")
except:
import exception
exception.Abort("ShopDialog.LoadDialog.BindObject")
self.itemSlotWindow.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EMPTY", self.SelectEmptySlot)
self.itemSlotWindow.SAFE_SetButtonEvent("LEFT", "EXIST", self.SelectItemSlot)
self.itemSlotWindow.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
self.itemSlotWindow.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
self.itemSlotWindow.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
self.btnBuy.SetToggleUpEvent(ui.__mem_func__(self.CancelShopping))
self.btnBuy.SetToggleDownEvent(ui.__mem_func__(self.OnBuy))
self.btnSell.SetToggleUpEvent(ui.__mem_func__(self.CancelShopping))
self.btnSell.SetToggleDownEvent(ui.__mem_func__(self.OnSell))
self.btnClose.SetEvent(ui.__mem_func__(self.AskClosePrivateShop))
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
self.Refresh()
def Destroy(self):
self.shopPrice = None
constInfo.IsItemShop = 0
self.Close()
self.ClearDictionary()
self.tooltipItem = 0
self.itemSlotWindow = 0
self.btnBuy = 0
self.btnSell = 0
self.btnClose = 0
self.titleBar = 0
self.questionDialog = None
self.popup = None
def Open(self, vid):
isPrivateShop = FALSE
isMainPlayerPrivateShop = FALSE
import chr
if chr.IsNPC(vid):
isPrivateShop = FALSE
else:
isPrivateShop = TRUE
if player.IsMainCharacterIndex(vid):
isMainPlayerPrivateShop = TRUE
self.btnBuy.Hide()
self.btnSell.Hide()
self.btnClose.Show()
else:
isMainPlayerPrivateShop = FALSE
self.btnBuy.Show()
self.btnSell.Show()
self.btnClose.Hide()
shop.Open(isPrivateShop, isMainPlayerPrivateShop)
self.Refresh()
self.SetTop()
self.Show()
(self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()
def Close(self):
self.shopPrice = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
constInfo.IsItemShop = 0
self.OnCloseQuestionDialog()
shop.Close()
net.SendShopEndPacket()
self.CancelShopping()
self.tooltipItem.HideToolTip()
self.Hide()
def AskClosePrivateShop(self):
questionDialog = uiCommon.QuestionDialog()
questionDialog.SetText(locale.PRIVATE_SHOP_CLOSE_QUESTION)
questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnClosePrivateShop))
questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
questionDialog.Open()
self.questionDialog = questionDialog
return TRUE
def OnClosePrivateShop(self):
net.SendChatPacket("/close_shop")
self.OnCloseQuestionDialog()
return TRUE
def OnPressEscapeKey(self):
self.Close()
return TRUE
def OnPressExitKey(self):
self.Close()
return TRUE
def OnBuy(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO)
app.SetCursor(app.BUY)
self.btnSell.SetUp()
def OnSell(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SHOP_SELL_INFO)
app.SetCursor(app.SELL)
self.btnBuy.SetUp()
def CancelShopping(self):
self.btnBuy.SetUp()
self.btnSell.SetUp()
app.SetCursor(app.NORMAL)
def __OnClosePopupDialog(self):
self.pop = None
def SellAttachedItem(self):
if shop.IsPrivateShop():
mouseModule.mouseController.DeattachObject()
return
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedCount = mouseModule.mouseController.GetAttachedItemCount()
if player.SLOT_TYPE_INVENTORY == attachedSlotType:
itemIndex = player.GetItemIndex(attachedSlotPos)
item.SelectItem(itemIndex)
if item.IsAntiFlag(item.ITEM_ANTIFLAG_SELL):
popup = uiCommon.PopupDialog()
popup.SetText(locale.SHOP_CANNOT_SELL_ITEM)
popup.SetAcceptEvent(self.__OnClosePopupDialog)
popup.Open()
self.popup = popup
elif player.IsValuableItem(attachedSlotPos):
itemPrice = item.GetISellItemPrice()
if item.Is1GoldItem():
itemPrice = attachedCount / itemPrice / 5
else:
itemPrice = itemPrice * max(1, attachedCount) / 5
itemName = item.GetItemName()
questionDialog = uiCommon.QuestionDialog()
questionDialog.SetText(locale.DO_YOU_SELL_ITEM(itemName, attachedCount, itemPrice))
questionDialog.SetAcceptEvent(lambda arg1=attachedSlotPos, arg2=attachedCount: self.OnSellItem(arg1, arg2))
questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
questionDialog.Open()
self.questionDialog = questionDialog
else:
self.OnSellItem(attachedSlotPos, attachedCount)
else:
snd.PlaySound("sound/ui/loginfail.wav")
mouseModule.mouseController.DeattachObject()
def OnSellItem(self, slotPos, count):
net.SendShopSellPacketNew(slotPos, count)
snd.PlaySound("sound/ui/money.wav")
self.OnCloseQuestionDialog()
def NieMamPP(self):
self.popup = uiCommon.PopupDialog()
self.popup.SetText("Du hast nicht genug A-Punkte")
self.popup.SetAcceptEvent(self.__OnClosePopupDialog)
self.popup.Open()
def OnCloseQuestionDialog(self):
if self.questionDialog:
self.questionDialog.Close()
self.questionDialog = None
def SelectEmptySlot(self, selectedSlotPos):
isAttached = mouseModule.mouseController.isAttached()
if isAttached:
self.SellAttachedItem()
def CutMoneyString(self, sourceText, startIndex, endIndex, insertingText, backText):
sourceLength = len(sourceText)
if sourceLength < startIndex:
return backText
text = sourceText[max(0, sourceLength-endIndex):sourceLength-startIndex]
if not text:
return backText
if int(text) <= 0:
return backText
text = str(int(text))
if backText:
backText = " " + backText
return text + insertingText + backText
def UnselectItemSlot(self, selectedSlotPos):
if shop.IsPrivateShop():
self.AskBuyItem(selectedSlotPos)
else:
if constInfo.IsItemShop == 1:
self.BuyFromIS(selectedSlotPos)
else:
net.SendShopBuyPacket(selectedSlotPos)
def NumberToMoneyString(self, number):
if number <= 0:
return "0 Yang"
number = str(number)
result = self.CutMoneyString(number, 0, 4, "", "")
result = self.CutMoneyString(number, 4, 8, "¸¸", result)
result = self.CutMoneyString(number, 8, 12, "¾ï", result)
result = result + " Yang"
return result
def SelectItemSlot(self, selectedSlotPos):
isAttached = mouseModule.mouseController.isAttached()
if isAttached:
self.SellAttachedItem()
else:
if TRUE == shop.IsMainPlayerPrivateShop():
return
curCursorNum = app.GetCursor()
if app.BUY == curCursorNum:
if constInfo.IsItemShop == 1:
self.AskBuyFromIS(selectedSlotPos)
else:
self.AskBuyItem(selectedSlotPos)
elif app.SELL == curCursorNum:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SHOP_SELL_INFO)
else:
selectedItemID = shop.GetItemID(selectedSlotPos)
itemCount = shop.GetItemCount(selectedSlotPos)
type = player.SLOT_TYPE_SHOP
if shop.IsPrivateShop():
type = player.SLOT_TYPE_PRIVATE_SHOP
mouseModule.mouseController.AttachObject(self, type, selectedSlotPos, selectedItemID, itemCount)
mouseModule.mouseController.SetCallBack("INVENTORY", ui.__mem_func__(self.DropToInventory))
snd.PlaySound("sound/ui/pick.wav")
def DropToInventory(self):
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
self.AskBuyItem(attachedSlotPos, constInfo.IsItemShop)
def BuyFromIS(self, slotPos, type=0):
constInfo.INPUT_DATA = slotPos
event.QuestButtonClick(constInfo.IS_QUEST)
if type == 1:
self.itemBuyQuestionDialog.Close()
self.itemBuyQuestionDialog = None
def AskBuyFromIS(self, slotPos):
itemIndex = shop.GetItemID(slotPos)
itemPrice = shop.GetItemPrice(slotPos)
itemCount = shop.GetItemCount(slotPos)
item.SelectItem(itemIndex)
itemName = item.GetItemName()
itemBuyQuestionDialog = uiCommon.QuestionDialog()
itemBuyQuestionDialog.SetText("Czy chcesz kupić " + itemName + " za " + (self.NumberToMoneyString(self.shopPrice[slotPos])[:-5]) + " TR?")
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.BuyFromIS(slotPos, 1))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg, type))
itemBuyQuestionDialog.Open()
itemBuyQuestionDialog.pos = slotPos
self.itemBuyQuestionDialog = itemBuyQuestionDialog
def AskBuyItem(self, slotPos, type=0):
if type == 1:
self.AskBuyFromIS(slotPos)
return
itemIndex = shop.GetItemID(slotPos)
itemPrice = shop.GetItemPrice(slotPos)
itemCount = shop.GetItemCount(slotPos)
item.SelectItem(itemIndex)
itemName = item.GetItemName()
itemBuyQuestionDialog = uiCommon.QuestionDialog()
itemBuyQuestionDialog.SetText(locale.DO_YOU_BUY_ITEM(itemName, itemCount, self.NumberToMoneyString(itemPrice)))
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerBuyItem(arg, type))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg, type))
itemBuyQuestionDialog.Open()
itemBuyQuestionDialog.pos = slotPos
self.itemBuyQuestionDialog = itemBuyQuestionDialog
def AnswerBuyItem(self, flag, type):
if flag:
pos = self.itemBuyQuestionDialog.pos
if type == 0:
net.SendShopBuyPacket(pos)
else:
self.BuyFromIS(pos)
self.itemBuyQuestionDialog.Close()
self.itemBuyQuestionDialog = None
def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItem
def OverInItem(self, slotIndex):
if mouseModule.mouseController.isAttached():
return
if 0 != self.tooltipItem:
if constInfo.IsItemShop == 0:
self.tooltipItem.SetShopItem(slotIndex, 0, 0)
else:
self.tooltipItem.SetShopItem(slotIndex, self.shopPrice[slotIndex], 1)
def OverOutItem(self):
if 0 != self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnUpdate(self):
USE_SHOP_LIMIT_RANGE = 1000
(x, y, z) = player.GetMainCharacterPosition()
if abs(x - self.xShopStart) > USE_SHOP_LIMIT_RANGE or abs(y - self.yShopStart) > USE_SHOP_LIMIT_RANGE:
self.Close()
class MallPageDialog(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
def __del__(self):
ui.ScriptWindow.__del__(self)
def Destroy(self):
self.ClearDictionary()
def Open(self):
scriptLoader = ui.PythonScriptLoader()
scriptLoader.LoadScriptFile(self, "uiscript/mallpagedialog.py")
self.GetChild("titlebar").SetCloseEvent(ui.__mem_func__(self.Close))
(x, y)=self.GetGlobalPosition()
x+=10
y+=30
MALL_PAGE_WIDTH = 600
MALL_PAGE_HEIGHT = 480
app.ShowWebPage(
"http://metin2.co.kr/08_mall/game_mall/login_fail.htm",
(x, y, x+MALL_PAGE_WIDTH, y+MALL_PAGE_HEIGHT))
self.Lock()
self.Show()
def Close(self):
app.HideWebPage()
self.Unlock()
self.Hide()
def OnPressEscapeKey(self):
self.Close()
return TRUE
MfG iRemix
Special Thanks:
-TheodorPL (verbuggte Vorlage)
P.S: Keiner fickt mit Exodius
|
|
|
|
04/19/2014, 07:20
|
#27
|
elite*gold: 1
Join Date: Jan 2013
Posts: 479
Received Thanks: 165
|
Sieht gut aus, danke
|
|
|
04/19/2014, 09:48
|
#28
|
elite*gold: 0
Join Date: Nov 2011
Posts: 84
Received Thanks: 2
|
networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 601)
help
|
|
|
04/19/2014, 10:44
|
#29
|
elite*gold: 0
Join Date: May 2011
Posts: 385
Received Thanks: 259
|
Schade um exodius
Aber besser es für alle Public zu machen als für Geld geile idioten !
|
|
|
04/19/2014, 17:05
|
#30
|
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,938
|
Das ist doch niemals deine eigene Version.. Die Version hier ist (zumindest teilweise) von *********.
|
|
|
|
|
Similar Threads
|
[Zwangs-Release]Aza Homepage
10/03/2013 - Metin2 PServer Guides & Strategies - 12 Replies
http://www.elitepvpers.com/forum/metin2-pserver-gu ides-strategies/2882600-zwangs-release-aza-homepag e-script.html
Die Version², wenn Aza damit ein Problem hat soll er sich bitte bei mir melden.
Screen:http://i.epvpimg.com/CuU3h.jpg
Download:https://mega.co.nz/#!Y8VTXQzS!biNiPBuWfN to14yQ1yG3sn9f6BNJQdneOmVRedixXuw
|
[Release] Zwangs Passwortänderung
07/20/2013 - Metin2 PServer Guides & Strategies - 26 Replies
Hallo e*pvp,
Da ja in letzter Zeit immer mehr Server gehackt werden und oftmals nur die account.sql released werden hatte ich vor einige Zeit mal das Skript für Shiro2 gemacht.
Es ist so aufgebaut das man die Account-ID braucht, das Passwort, ein Charakternamen und die Anzahl der Charaktere. Sollte alles stimmen wird das Passwort geändert und der Accountstatus geht zurück auf OK.
Ihr fügt die sysbugpwchange.php in eurem Pages Ordner ein. Ihr müsst ggf. anpassung an eurem Design machen....
|
[Zwangs-Release] Injashi Homepage
03/16/2013 - Metin2 PServer Guides & Strategies - 33 Replies
Hallo Leute, da ich gesehen habe das viele, sehr viele Leute meine Gekaufte Homepage Rippen und weiter verkaufen, sehe ich mich gezwungen diese nun öffentlich zu machen.
Es handelt sich, wie ihr Sicherlich schon um die Injashi Homepage von Chris ( iKyroja ), welche so Aussieht :
http://fc04.deviantart.net/fs71/f/2012/189/3/0/in jashi_webdesign_by_ikyroja-d56g85e.jpg
Diese Homepage bietet euch :
Komplette anpassung in HTML und CSS.
Ein Funktionierender und einfacher jQuery Slider.
|
[Re-Release]Achievementshop Quest
02/19/2012 - Metin2 PServer Guides & Strategies - 26 Replies
Joa, wie wohl damals bekannt wurde, wurde mein damaliger Server, der inzwischen nicht mehr existiert wohl einmal ausgeräumt.
Die Achievementshop Quest ist meine Quest, genauso wie damals der verbuggte Ranking Quest.
Werde nacher einfach meine Files releasen, da die ja anscheinend immernoch schön gekauft werden, sodass die, die ihr Geld da reingesteckt haben schön dumm aussehen dürfen ;)
Dazu überlege ich mir den Tradehack(Video mitsamt Thread folgt^^) zu publizieren.
Zum...
|
All times are GMT +2. The time now is 06:09.
|
|