-
Posts
161 -
Joined
-
Last visited
-
Days Won
1 -
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by AlexxD
-
-
Hi all, so I've implemented today Active Slot Effect for DS Button in inventory, but I have small image of DS Button, and it's highlighting for big button, as in:
IMAGE
I tried to changeDSSButtonEffect.SetPosition(3.2, 0) DSSButtonEffect.AppendSlot(0, 0, 0, 32, 32) to DSSButtonEffect.SetPosition(0.8, 0) DSSButtonEffect.AppendSlot(0, 0, 0, 8, 8)
but no effect.. can someone explain me why is showing like that and how to fix?
-
On 12/24/2016 at 7:01 PM, Germais said:
It's been quite a while for now that i can't figure out the cause of this problem,
As you can see in the gif below, the added bonuses to the sash stay on top of the base bonuses which is a big problem for the certificate of reversal (sash bonus removal), plus it looks ugly.Now i've been looking around and it looks like it may be comming from the item_proto itself because when I use my older version of the proto it shows up correctly. I do think it's a problem with the dump_proto, maybe the structure is not right, so I went to check and i think everything looks fine for the sash, besides the only thing that need to be on the item read is COSTUME_ACCE and WEAR_COSTUME_ACCE.
If anyone askes for it, here is my dump_proto.cpp(http://pastebin.com/XuqV0SXQ), ItemCSVReader.cpp(http://pastebin.com/FQjnrVe4) and here is the structure of my item_proto(http://pastebin.com/sSj9fKdX).
By the way, I also thought it could be a problem with the uitooltip.py from the client so I went to take a look at everything seems fine...
Any guesses on the cause feel free to comment, thanks in advance.
"""""" #1) Search: def __AppendAttributeInformation(self, attrSlot): #2) After their function make a new line and paste: def __AppendAcceAttributeInformation(self, attrSlot): if 0 != attrSlot: hasAttack = 0 hasMagicAttack = 0 minPower = 0 maxPower = 0 minMagicAttackPower = 0 maxMagicAttackPower = 0 for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): if i <= 6: continue else: type = attrSlot[i][0] value = attrSlot[i][1] if 0 == value: continue if type == 53 and i == 8: hasAttack = 1 minPower = value elif type == 53 and i == 9: hasAttack = 1 maxPower = value elif type == 55 and i == 10: hasMagicAttack = 1 minMagicAttackPower = value elif type == 55 and i == 11: hasMagicAttack = 1 maxMagicAttackPower = value if hasAttack == 1: self.__AppendAttackAccePowerInfo(minPower, maxPower) if hasMagicAttack == 1: self.__AppendMagicAttackAcceInfo(minMagicAttackPower, maxMagicAttackPower) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): if i <= 6 or i >= 8 and i <= 11: continue else: type = attrSlot[i][0] value = attrSlot[i][1] if 0 == value: continue affectString = self.__GetAffectString(type, value) if affectString: affectColor = self.__GetAttributeColor(i, value) self.AppendTextLine(affectString, affectColor) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): if i >= 7: continue else: type = attrSlot[i][0] value = attrSlot[i][1] if 0 == value: continue affectString = self.__GetAffectString(type, value) if affectString: affectColor = self.__GetAttributeColor(i, value) self.AppendTextLine(affectString, affectColor) def __AppendAttackAccePowerInfo(self, minPower, maxPower): minPower_final = minPower maxPower_final = maxPower if maxPower > minPower: self.AppendTextLine(localeInfo.TOOLTIP_ITEM_ATT_POWER % (minPower_final, maxPower_final), self.POSITIVE_COLOR) else: self.AppendTextLine(localeInfo.TOOLTIP_ITEM_ATT_POWER_ONE_ARG % (minPower_final), self.POSITIVE_COLOR) def __AppendMagicAttackAcceInfo(self, minMagicAttackPower, maxMagicAttackPower): minMagicAttackPower_final = minMagicAttackPower maxMagicAttackPower_final = maxMagicAttackPower if minMagicAttackPower_final > 0 or maxMagicAttackPower_final > 0: if maxMagicAttackPower_final > minMagicAttackPower_final: self.AppendTextLine(localeInfo.TOOLTIP_ITEM_MAGIC_ATT_POWER % (minMagicAttackPower_final, maxMagicAttackPower_final), self.POSITIVE_COLOR) else: self.AppendTextLine(localeInfo.TOOLTIP_ITEM_MAGIC_ATT_POWER_ONE_ARG % (minMagicAttackPower_final), self.POSITIVE_COLOR) """""" """""" #1) Search: def __GetAttributeColor(self, index, value): #2) Delete their function and paste: def __GetAttributeColor(self, index, value): if value > 0: if index >= 5 and index <= 6: return self.SPECIAL_POSITIVE_COLOR2 elif index >= 7: return self.POSITIVE_COLOR else: return self.SPECIAL_POSITIVE_COLOR elif value == 0: return self.NORMAL_COLOR else: return self.NEGATIVE_COLOR """""" """""" #1) Search: isCostumeBody = 0 #2) Make a new line and paste: isCostumeAcce = 0 """""" """""" #1) Search: isCostumeBody = item.COSTUME_TYPE_BODY == itemSubType #2) Make a new line and paste: isCostumeAcce = item.COSTUME_TYPE_ACCE == itemSubType """""" """""" #1) Search: elif 0 != isCostumeItem: #2) Delete their function and paste: elif 0 != isCostumeItem: self.__AppendLimitInformation() self.__AppendAffectInformation() if isCostumeAcce != 0: self.__AppendAcceAttributeInformation(attrSlot) else: self.__AppendAttributeInformation(attrSlot) self.AppendWearableInformation() bHasRealtimeFlag = 0 for i in xrange(item.LIMIT_MAX_NUM): (limitType, limitValue) = item.GetLimit(i) if item.LIMIT_REAL_TIME == limitType: bHasRealtimeFlag = 1 if 1 == bHasRealtimeFlag: self.AppendMallItemLastTime(metinSlot[0]) if isCostumeAcce != 0: if metinSlot != 0: absChance = int(metinSlot[1]) if absChance > 0: self.AppendSpace(5) self.AppendTextLine(localeInfo.ACCE_ABSORB_CHANCE % (absChance), self.CONDITION_COLOR) """""" edit for your files where you need
- 1
-
1 hour ago, Exonow said:
costumes?
this
if (pItem->GetSubType() == CItemData::ARMOR_BODY)
to
if (pItem->GetSubType() == CItemData::COSTUME_ARMOR)
no?
if (pItem->GetSubType() == CItemData::COSTUME_BODY)
-
check item count. Maybe you have WORD type and offline has BYTE.
-
36 minutes ago, Kunoji said:
Hello! I have a problems with:
a) Login Interface, Character Select Interface etc.
I installed interface from this link:
http://www.elitepvpers.com/forum/metin2-pserver-designs-websites-scripts/3409632-release-code-zum-interface-von-feistygraphic.html
And I have an error. All it's okay, but client crash after logging.
Sysser:
1214 17:34:07089 :: networkModule.py(line:200) SetSelectCharacterPhase system.py(line:130) __pack_import system.py(line:110) _process_result introSelect.py(line:9) ? system.py(line:137) __pack_import networkModule.SetSelectCharacterPhase - exceptions.ImportError:No module named localeInfo 1214 17:34:07089 :: ============================================================================================================ 1214 17:34:07089 :: Abort!!!!
B )
With in-game interface from this link:
http://www.elitepvpers.com/forum/metin2-pserver-designs-websites-scripts/3578220-2015-client-interface.html
All is ok, but when I readed a mission interface disappears and i can't run, walk etc.
Sorry for my bad English, but I'm from Poland
GreetingsHere:
introSelect.py(line:9) ?
At line 9 from introSelect.py you have localeInfo, replace with
locale
PS: Replace all localeInfo with locale
-
On 13.12.2016 at 0:09 PM, EnKor said:
Hi there.
my sys error has to many of this error:
SYSERR: Dec 14 10:01:41 :: Process: UNKNOWN HEADER: 9, LAST HEADER: 254(2), REMAIN BYTES: 8, fd: 19
but with diferente headers.
i have search a lot. and people say its because diferent pachet.h client/server.
i realy dont know how to solve this. can any one help me please. i upload pachet.h from server/client
edit:
and hot to solve this warnings in client Source from cryptopp
../../../Extern/include/cryptopp/cryptlib.h: In member function 'bool CryptoPP::NameValuePairs::GetValue(const char*, T&) const [with T = std::string]': ../../../Extern/include/cryptopp/cryptlib.h:277: instantiated from here ../../../Extern/include/cryptopp/cryptlib.h:264: warning: dereferencing type-punned pointer will break strict-aliasing rules ../../../Extern/include/cryptopp/cryptlib.h: In member function 'bool CryptoPP::NameValuePairs::GetValue(const char*, T&) const [with T = int]': ../../../Extern/include/cryptopp/cryptlib.h:283: instantiated from here
please.
Take a look here:
HEADER_CG_DIRECT_ENTER = 9
it's in your binary. Search everything that have a connection with this header.
-
1 hour ago, icewolf said:
how i need to put this
the FileZilla + Putty didn't work
Try with WinScp
-
-
On 02.12.2016 at 3:08 AM, Gmmetinero said:
I have this error when I creating the client source
Error 83 error LNK2001: external symbol "public: int __thiscall CPythonShop::GetOfflineShopItemPriceCheque(struct SItemPos)" (?GetOfflineShopItemPriceCheque@CPythonShop@@QAEHUSItemPos@@@Z) without resolving C:\Users\Administrador\Desktop\Cliente\vs_files\UserInterface\PythonShop.obj UserInterface Error 84 error LNK1120: 1 external unresolved C:\Users\Administrador\Desktop\Cliente\binary\Metin2Release.exe UserInterface
Thanks for advance
You have a problem here:
CPythonShop::GetOfflineShopItemPriceCheque
Search it and take a look at
SItemPos
and see if you have something like "won" there
-
17 minutes ago, icewolf said:
Hi Everyone
i have a big problem with my FreeBSD
i cant Write "root" or the password
and the FileZilla + Putty does'nt work because i don't have the IP from FreeBSD
this problem came when my computer sadnly shutdown
When i try to Write "root"
it's give me this error
Please guy's i have no Packup for my files
Restart your vdi and when this occurs:
Enter full pathname of shell or RETURN for /bin/sh.
1) Press ENTER and after write on console:
fsck -y
1.1) Press ENTER and after the system finished scanning your HDD, write:
shutdown -r now
for a restart. I think this will help you.
- 2
-
Just now, filipw1 said:
Sash system is dump. Everyone who have problem with that system don't use sash.
Yes but if you have enough C++ resources in your brain you can adapt this system for sash system, right?
-
On 10/14/2016 at 11:14 PM, filipw1 said:
Works fine. The reason of game crashes is in a input_main.cpp.
Replace that function:
http://pastebin.com/xAyqSn4TAnd then in uiprivateshopsearch.py in your root change these functions:
http://pastebin.com/7d2Dw4MDNow it will be fine (for me it's fine :D)
If you're doing this, shoulders won't be found so perfectly, and then the bugs will appear, because an acce has 15 bonuses, but the system reads only 7, so the players won't see the full bonuses on it.
-
-
-
1 minute ago, Chris90909090909090 said:Spoiler
import chr
import grp
import app
import math
import wndMgr
import snd
import net
import systemSetting
import localeInfo
import chrimport ui
import uiScriptLocale
import networkModule
import playerSettingModule####################################
# ºü¸¥ ½ÇÇàÀ» À§ÇÑ ¸ðµâ ·Îµù ºÐ´ã
####################################
import uiCommon
import uiMapNameShower
import uiAffectShower
import uiPlayerGauge
import uiCharacter
import uiTarget
import consoleModule
import interfaceModule
import uiTaskBar
import uiInventory###################################
LEAVE_BUTTON_FOR_POTAL = FALSE
NOT_NEED_DELETE_CODE = FALSE
ENABLE_ENGNUM_DELETE_CODE = FALSEif localeInfo.IsJAPAN():
NOT_NEED_DELETE_CODE = TRUE
elif localeInfo.IsHONGKONG():
ENABLE_ENGNUM_DELETE_CODE = TRUE
elif localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
ENABLE_ENGNUM_DELETE_CODE = TRUE
elif localeInfo.IsEUROPE():
ENABLE_ENGNUM_DELETE_CODE = TRUE
###################################class SelectCharacterWindow(ui.Window):
# SLOT4
#SLOT_ROTATION = ( 140.0, 260.0, 20.0 )
#SLOT_COUNT = 3
SLOT_ROTATION = [144.0,216.0,288.0, 0.0, 72.0, 0,0,0]
SLOT_COUNT = 8
CHARACTER_TYPE_COUNT = 5EMPIRE_NAME = {
net.EMPIRE_A : localeInfo.EMPIRE_A,
net.EMPIRE_B : localeInfo.EMPIRE_B,
net.EMPIRE_C : localeInfo.EMPIRE_C
}class CharacterRenderer(ui.Window):
def OnRender(self):
grp.ClearDepthBuffer()grp.SetGameRenderState()
grp.PushState()
grp.SetOmniLight()screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()
newScreenWidth = float(screenWidth - 70)
newScreenHeight = float(screenHeight)grp.SetViewport(70.0/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
app.SetCenterPosition(-15.0, -170.0, -35.0)
app.SetCamera(1550.0+(2.2*(float(newScreenHeight-600))), 15.0, 180.0, 95.0)
grp.SetPerspective(11.0, newScreenWidth/newScreenHeight, 1000.0, 3000.0)(x, y) = app.GetCursorPosition()
grp.SetCursorPosition(x, y)chr.Deform()
chr.Render()grp.RestoreViewport()
grp.PopState()
grp.SetInterfaceRenderState()def __init__(self, stream):
ui.Window.__init__(self)
net.SetPhaseWindow(net.PHASE_WINDOW_SELECT, self)self.stream=stream
self.slot = self.stream.GetCharacterSlot()self.openLoadingFlag = FALSE
self.startIndex = -1
self.startReservingTime = 0self.flagDict = {}
self.curRotation = []
self.destRotation = []
for rot in self.SLOT_ROTATION:
self.curRotation.append(rot)
self.destRotation.append(rot)self.curNameAlpha = []
self.destNameAlpha = []
for i in xrange(self.CHARACTER_TYPE_COUNT):
self.curNameAlpha.append(0.0)
self.destNameAlpha.append(0.0)self.curGauge = [0.0, 0.0, 0.0, 0.0]
self.destGauge = [0.0, 0.0, 0.0, 0.0]self.dlgBoard = 0
self.changeNameFlag = FALSE
self.nameInputBoard = None
self.sendedChangeNamePacket = FALSEself.startIndex = -1
self.isLoad = 0
import constInfo
constInfo.BANK_PIN = 0def __del__(self):
ui.Window.__del__(self)
net.SetPhaseWindow(net.PHASE_WINDOW_SELECT, 0)def Open(self):
if not self.__LoadBoardDialog(uiScriptLocale.LOCALE_UISCRIPT_PATH + "selectcharacterwindow.py"):
dbg.TraceError("SelectCharacterWindow.Open - __LoadScript Error")
returnif not self.__LoadQuestionDialog("uiscript/questiondialog.py"):
return
self.Rotation = 0
playerSettingModule.LoadGameData("INIT")self.InitCharacterBoard()
self.btnStart.Enable()
self.btnCreate.Enable()
self.btnDelete.Enable()
#self.btnExit.Enable()
self.btnLeft.Enable()
self.btnRight.Enable()self.dlgBoard.Show()
self.SetWindowName("SelectCharacterWindow")
self.Show()if self.slot>=0:
self.SelectSlot(self.slot)app.SetCenterPosition(0.0, 0.0, 0.0)
app.SetCamera(1550.0, 15.0, 180.0, 95.0)self.isLoad=1
self.Refresh()if self.stream.isAutoSelect:
chrSlot=self.stream.GetCharacterSlot()
self.SelectSlot(chrSlot)
self.StartGame()self.HideAllFlag()
self.SetEmpire(net.GetEmpireID())app.ShowCursor()
def Close(self):
self.stream.popupWindow.Close()if self.dlgBoard:
self.dlgBoard.ClearDictionary()self.empireName = None
self.flagDict = {}
self.dlgBoard = None
self.btnStart = None
self.btnCreate = None
self.btnDelete = None
#self.btnExit = None
self.btnLeft = None
self.btnRight = None
self.backGround = Noneself.dlgQuestion.ClearDictionary()
self.dlgQuestion = None
self.dlgQuestionText = None
self.dlgQuestionAcceptButton = None
self.dlgQuestionCancelButton = None
self.privateInputBoard = None
self.nameInputBoard = Nonechr.DeleteInstance(0)
chr.DeleteInstance(1)
chr.DeleteInstance(2)
chr.DeleteInstance(3)
chr.DeleteInstance(4)self.Hide()
self.KillFocus()app.HideCursor()
def SetEmpire(self, id):
#self.empireName.SetText(self.EMPIRE_NAME.get(id, ""))
if self.flagDict.has_key(id):
self.flagDict[id].Show()
def HideAllFlag(self):
for flag in self.flagDict.values():
flag.Hide()def Refresh(self):
if not self.isLoad:
return# SLOT4
indexArray = (4, 3, 2, 1, 0)
id=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
race=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_RACE)
form=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_FORM)
name=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_NAME)
hair=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_HAIR)
acce = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ACCE)
if id:
self.MakeCharacter(i, id, name, race, form, hair, acce)self.SelectSlot(self.slot)
def Refresh2(self):
if not self.isLoad:
return
indexArray = (4, 3, 2, 1, 0)
for i in xrange(8):
if chr.HasInstance(i):
chr.DeleteInstance(i)
# SLOT4
id=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
race=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_RACE)
form=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_FORM)
name=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_NAME)
hair=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_HAIR)
acce = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ACCE)if id:
self.MakeCharacter(i, id, name, race, form, hair, acce)def GetCharacterSlotID(self, slotIndex):
return net.GetAccountCharacterSlotDataInteger(slotIndex, net.ACCOUNT_CHARACTER_SLOT_ID)def __LoadQuestionDialog(self, fileName):
self.dlgQuestion = ui.ScriptWindow()try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self.dlgQuestion, fileName)
except:
import exception
exception.Abort("SelectCharacterWindow.LoadQuestionDialog.LoadScript")try:
GetObject=self.dlgQuestion.GetChild
self.dlgQuestionText=GetObject("message")
self.dlgQuestionAcceptButton=GetObject("accept")
self.dlgQuestionCancelButton=GetObject("cancel")
except:
import exception
exception.Abort("SelectCharacterWindow.LoadQuestionDialog.BindObject")self.dlgQuestionText.SetText(localeInfo.SELECT_DO_YOU_DELETE_REALLY)
self.dlgQuestionAcceptButton.SetEvent(ui.__mem_func__(self.RequestDeleteCharacter))
self.dlgQuestionCancelButton.SetEvent(ui.__mem_func__(self.dlgQuestion.Hide))
return 1def __LoadBoardDialog(self, fileName):
self.dlgBoard = ui.ScriptWindow()try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self.dlgBoard, fileName)
except:
import exception
exception.Abort("SelectCharacterWindow.LoadBoardDialog.LoadScript")try:
GetObject=self.dlgBoard.GetChild
self.charvon = GetObject("character_txt2")
self.btnStart = GetObject("start_button")
self.btnCreate = GetObject("create_button")
self.btnDelete = GetObject("delete_button")
#self.btnExit = GetObject("exit_button")self.CharacterName = GetObject("character_name_value")
self.CharacterLevel = GetObject("character_level_value")
#self.PlayTime = GetObject("character_play_time_value")
self.CharacterHTH = GetObject("character_hth")
self.CharacterINT = GetObject("character_int")
self.CharacterSTR = GetObject("character_str")
self.CharacterDEX = GetObject("character_dex")
self.GuildName = GetObject("GuildName")self.NameList = []
#self.NameList.append(GetObject("name_warrior"))
#self.NameList.append(GetObject("name_assassin"))
#self.NameList.append(GetObject("name_sura"))
#self.NameList.append(GetObject("name_shaman"))
#self.NameList.append(GetObject("name_shaman"))self.GaugeList = []
self.GaugeList.append(GetObject("gauge_hth"))
self.GaugeList.append(GetObject("gauge_int"))
self.GaugeList.append(GetObject("gauge_str"))
self.GaugeList.append(GetObject("gauge_dex"))self.btnLeft = GetObject("left_button")
self.btnRight = GetObject("right_button")#self.empireName = GetObject("EmpireName")
#self.flagDict[net.EMPIRE_A] = GetObject("EmpireFlag_A")
#self.flagDict[net.EMPIRE_B] = GetObject("EmpireFlag_B")
#self.flagDict[net.EMPIRE_C] = GetObject("EmpireFlag_C")self.backGround = GetObject("BackGround")
self.charrend = GetObject("charrend")except:
import exception
exception.Abort("SelectCharacterWindow.LoadBoardDialog.BindObject")for name in self.NameList:
name.SetAlpha(0.0)self.btnStart.SetEvent(ui.__mem_func__(self.StartGame))
self.btnCreate.SetEvent(ui.__mem_func__(self.CreateCharacter))
#self.btnExit.SetEvent(ui.__mem_func__(self.ExitSelect))if NOT_NEED_DELETE_CODE:
self.btnDelete.SetEvent(ui.__mem_func__(self.PopupDeleteQuestion))
else:
self.btnDelete.SetEvent(ui.__mem_func__(self.InputPrivateCode))self.btnLeft.SetEvent(ui.__mem_func__(self.DecreaseSlotIndex))
self.btnRight.SetEvent(ui.__mem_func__(self.IncreaseSlotIndex))
self.chrRenderer = self.CharacterRenderer()
self.chrRenderer.SetParent(self.backGround)
self.chrRenderer.Show()return 1
def MakeCharacter(self, index, id, name, race, form, hair, acce):
if 0 == id:
returnchr.CreateInstance(index)
chr.SelectInstance(index)
chr.SetVirtualID(index)
chr.SetNameString(name)chr.SetRace(race)
chr.SetArmor(form)
chr.SetHair(hair)
chr.SetAcce(acce)chr.Refresh()
chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)chr.SetRotation(0.0)
## Manage Character
def StartGame(self):if self.sendedChangeNamePacket:
returnif self.changeNameFlag:
self.OpenChangeNameDialog()
returnif -1 != self.startIndex:
return
self.btnStart.SetUp()
self.btnCreate.SetUp()
self.btnDelete.SetUp()
#self.btnExit.SetUp()
self.btnLeft.SetUp()
self.btnRight.SetUp()self.btnStart.Disable()
self.btnCreate.Disable()
self.btnDelete.Disable()
#self.btnExit.Disable()
self.btnLeft.Disable()
self.btnRight.Disable()
self.dlgQuestion.Hide()self.stream.SetCharacterSlot(self.slot)
self.startIndex = self.slot
self.startReservingTime = app.GetTime()for i in xrange(self.SLOT_COUNT):
if FALSE == chr.HasInstance(i):
continuechr.SelectInstance(i)
if i == self.slot:
self.slot=self.slot
chr.PushOnceMotion(chr.MOTION_INTRO_SELECTED, 0.1)
continuechr.PushOnceMotion(chr.MOTION_INTRO_NOT_SELECTED, 0.1)
def OpenChangeNameDialog(self):
import uiCommon
nameInputBoard = uiCommon.InputDialogWithDescription()
nameInputBoard.SetTitle(localeInfo.SELECT_CHANGE_NAME_TITLE)
nameInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputName))
nameInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputName))
nameInputBoard.SetMaxLength(chr.PLAYER_NAME_MAX_LEN)
nameInputBoard.SetBoardWidth(200)
nameInputBoard.SetDescription(localeInfo.SELECT_INPUT_CHANGING_NAME)
nameInputBoard.Open()
nameInputBoard.slot = self.slot
self.nameInputBoard = nameInputBoarddef OnChangeName(self, id, name):
self.SelectSlot(id)
self.sendedChangeNamePacket = FALSE
self.PopupMessage(localeInfo.SELECT_CHANGED_NAME)def AcceptInputName(self):
changeName = self.nameInputBoard.GetText()
if not changeName:
returnself.sendedChangeNamePacket = TRUE
net.SendChangeNamePacket(self.nameInputBoard.slot, changeName)
return self.CancelInputName()def CancelInputName(self):
self.nameInputBoard.Close()
self.nameInputBoard = None
return TRUEdef OnCreateFailure(self, type):
self.sendedChangeNamePacket = FALSE
if 0 == type:
self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_STRANGE_NAME)
elif 1 == type:
self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_ALREADY_EXIST_NAME)
elif 100 == type:
self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_STRANGE_INDEX)def CreateCharacter(self):
id = self.GetCharacterSlotID(self.slot)
if 0==id:
self.stream.SetCharacterSlot(self.slot)EMPIRE_MODE = 1
if EMPIRE_MODE:
if self.__AreAllSlotEmpty():
self.stream.SetReselectEmpirePhase()
else:
self.stream.SetCreateCharacterPhase()else:
self.stream.SetCreateCharacterPhase()def __AreAllSlotEmpty(self):
for iSlot in xrange(self.SLOT_COUNT):
if 0!=net.GetAccountCharacterSlotDataInteger(iSlot, net.ACCOUNT_CHARACTER_SLOT_ID):
return 0
return 1def PopupDeleteQuestion(self):
id = self.GetCharacterSlotID(self.slot)
if 0 == id:
returnself.dlgQuestion.Show()
self.dlgQuestion.SetTop()def RequestDeleteCharacter(self):
self.dlgQuestion.Hide()id = self.GetCharacterSlotID(self.slot)
if 0 == id:
self.PopupMessage(localeInfo.SELECT_EMPTY_SLOT)
returnnet.SendDestroyCharacterPacket(self.slot, "1234567")
self.PopupMessage(localeInfo.SELECT_DELEING)def InputPrivateCode(self):
import uiCommon
privateInputBoard = uiCommon.InputDialogWithDescription()
privateInputBoard.SetTitle(localeInfo.INPUT_PRIVATE_CODE_DIALOG_TITLE)
privateInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrivateCode))
privateInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrivateCode))if ENABLE_ENGNUM_DELETE_CODE:
pass
else:
privateInputBoard.SetNumberMode()privateInputBoard.SetSecretMode()
privateInputBoard.SetMaxLength(7)
privateInputBoard.SetBoardWidth(250)
privateInputBoard.SetDescription(localeInfo.INPUT_PRIVATE_CODE_DIALOG_DESCRIPTION)
privateInputBoard.Open()
self.privateInputBoard = privateInputBoarddef AcceptInputPrivateCode(self):
privateCode = self.privateInputBoard.GetText()
if not privateCode:
returnid = self.GetCharacterSlotID(self.slot)
if 0 == id:
self.PopupMessage(localeInfo.SELECT_EMPTY_SLOT)
returnnet.SendDestroyCharacterPacket(self.slot, privateCode)
self.PopupMessage(localeInfo.SELECT_DELEING)self.CancelInputPrivateCode()
return TRUEdef CancelInputPrivateCode(self):
self.privateInputBoard = None
return TRUEdef OnDeleteSuccess(self, slot):
self.PopupMessage(localeInfo.SELECT_DELETED)
self.DeleteCharacter(slot)def OnDeleteFailure(self):
self.PopupMessage(localeInfo.SELECT_CAN_NOT_DELETE)def DeleteCharacter(self, index):
chr.DeleteInstance(index)
self.SelectSlot(self.slot)def ExitSelect(self):
self.dlgQuestion.Hide()
if LEAVE_BUTTON_FOR_POTAL:
if app.loggined:
self.stream.SetPhaseWindow(0)
else:
self.stream.setloginphase()
else:
self.stream.SetLoginPhase()self.Hide()
def GetSlotIndex(self):
return self.slotdef DecreaseSlotIndex(self):
slotIndex = (self.GetSlotIndex() - 1 + self.SLOT_COUNT) % self.SLOT_COUNT
self.SelectSlot(slotIndex)def IncreaseSlotIndex(self):
slotIndex = (self.GetSlotIndex() + 1) % self.SLOT_COUNT
self.SelectSlot(slotIndex)def SelectSlot(self, index):
if index < 0:
return
if index >= self.SLOT_COUNT:
returnself.slot = index
self.Refresh2()
self.charvon.SetText(str(self.slot+1) + " 8")chr.SelectInstance(self.slot)
for i in xrange(self.CHARACTER_TYPE_COUNT):
self.destNameAlpha = 0.0for i in xrange(self.SLOT_COUNT):
self.destRotation[(i+self.slot)%self.SLOT_COUNT] = self.SLOT_ROTATIONself.destGauge = [0.0, 0.0, 0.0, 0.0, 0.0]
id=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
if 0 != id:self.btnStart.Enable()
self.btnDelete.Enable()
self.btnCreate.Disable()playTime=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
level=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_LEVEL)
race=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_RACE)
valueHTH=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_HTH)
valueINT=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_INT)
valueSTR=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_STR)
valueDEX=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_DEX)
name=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_NAME)
guildID=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_GUILD_ID)
guildName=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_GUILD_NAME)
self.changeNameFlag=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_CHANGE_NAME_FLAG)job = chr.RaceToJob(race)
if job >= 0 and job < self.CHARACTER_TYPE_COUNT:
self.destNameAlpha[job] = 1.0self.CharacterName.SetText(name)
self.CharacterLevel.SetText(str(level))#self.PlayTime.SetText(str(playTime))
self.CharacterHTH.SetText("Vitalitat(" + str(valueHTH) + "):")
self.CharacterINT.SetText("Intelligenz(" + str(valueINT) + "):")
self.CharacterSTR.SetText("Starke(" + str(valueSTR) + "):")
self.CharacterDEX.SetText("Beweglichkeit(" + str(valueDEX) + "):")if guildName:
self.GuildName.SetText(guildName)
else:
self.GuildName.SetText(localeInfo.SELECT_NOT_JOIN_GUILD)statesSummary = float(valueHTH + valueINT + valueSTR + valueDEX)
if statesSummary > 0.0:
self.destGauge = [
float(valueHTH) / statesSummary,
float(valueINT) / statesSummary,
float(valueSTR) / statesSummary,
float(valueDEX) / statesSummary
]else:
self.InitCharacterBoard()
def InitCharacterBoard(self):
self.btnStart.Disable()
self.btnDelete.Disable()
self.btnCreate.Enable()self.CharacterName.SetText("")
self.CharacterLevel.SetText("")
#self.PlayTime.SetText("")
self.CharacterHTH.SetText("")
self.CharacterINT.SetText("")
self.CharacterSTR.SetText("")
self.CharacterDEX.SetText("")
self.GuildName.SetText(localeInfo.SELECT_NOT_JOIN_GUILD)## Event
def OnKeyDown(self, key):if 1 == key:
self.ExitSelect()
if 2 == key:
self.SelectSlot(0)
if 3 == key:
self.SelectSlot(1)
if 4 == key:
self.SelectSlot(2)if 28 == key:
id = net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
if 0 == id:
self.CreateCharacter()else:
self.StartGame()if 203 == key:
self.slot = (self.GetSlotIndex() - 1 + self.SLOT_COUNT) % self.SLOT_COUNT
self.SelectSlot(self.slot)
if 205 == key:
self.slot = (self.GetSlotIndex() + 1) % self.SLOT_COUNT
self.SelectSlot(self.slot)return TRUE
def OnUpdate(self):
chr.Update()
self.Rotation = self.Rotation - 0.5
chr.SetRotation(self.Rotation)for i in xrange(4):
self.curGauge += (self.destGauge - self.curGauge) / 10.0
if abs(self.curGauge - self.destGauge) < 0.005:
self.curGauge = self.destGauge
self.GaugeList.SetPercentage(self.curGauge, 1.0)for i in xrange(self.CHARACTER_TYPE_COUNT):
self.curNameAlpha += (self.destNameAlpha - self.curNameAlpha) / 10.0
if len(self.NameList) > i:
self.NameList.SetAlpha(self.curNameAlpha)#for i in xrange(self.SLOT_COUNT):
#
# if FALSE == chr.HasInstance(i):
# continue
#
# chr.SelectInstance(i)
#
# distance = 50.0
# rotRadian = self.destRotation * (math.pi*2) / 360.0
# x = distance*math.sin(rotRadian) + distance*math.cos(rotRadian)
# y = distance*math.cos(rotRadian) - distance*math.sin(rotRadian)
# chr.SetPixelPosition(int(x), int(y), 30)
#
# #####
#
# dir = app.GetRotatingDirection(self.destRotation, self.curRotation)
# rot = app.GetDegreeDifference(self.destRotation, self.curRotation)
#
# if app.DEGREE_DIRECTION_RIGHT == dir:
# self.curRotation += rot / 10.0
# elif app.DEGREE_DIRECTION_LEFT == dir:
# self.curRotation -= rot / 10.0
#
# self.curRotation = (self.curRotation + 360.0) % 360.0#######################################################
if -1 != self.startIndex:## Temporary
## BackGroundLoadingÀÌ Áö¿ø µÉ¶§±îÁö Àӽ÷Î..
if app.GetTime() - self.startReservingTime > 3.0:
if FALSE == self.openLoadingFlag:
chrSlot=self.stream.GetCharacterSlot()
net.DirectEnter(chrSlot)
self.openLoadingFlag = TRUEplayTime=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
import player
player.SetPlayTime(playTime)
import chat
chat.Clear() ## µé¾î°¥¶§ Chat À» ÃʱâÈ. Àӽà Pos.
## Temporary
#######################################################def EmptyFunc(self):
passdef PopupMessage(self, msg, func=0):
if not func:
func=self.EmptyFuncself.stream.popupWindow.Close()
self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)def OnPressExitKey(self):
self.ExitSelect()
return TRUEDon't copy.. upload it somewhere or give me it full, .py file
-
16 minutes ago, Chris90909090909090 said:
Post your introselect.py
-
On 9/22/2016 at 4:43 PM, Legend said:
Can you explain to us about your problem?
He's meaning he can't see sash on the character when he select it (root/introselect.py)
On 9/22/2016 at 5:32 PM, Chris90909090909090 said:i see sash not in introselect
1) Search in introselect:
Spoilerdef Refresh(self):
1.1) After:
Spoilerhair = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_HAIR)
1.2) Add:
Spoileracce = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ACCE)
2) Search:
Spoilerself.MakeCharacter(i, id, name, race, form, hair)
2.1) Replace with:
Spoilerself.MakeCharacter(i, id, name, race, form, hair, acce)
3) Search:
Spoilerdef MakeCharacter
3.1) Replace definition with this:
Spoilerdef MakeCharacter(self, index, id, name, race, form, hair, acce):
4) After this:
Spoilerchr.SetHair(hair)
*in def MakeCharacter definition*
4.1) Add:
Spoilerchr.SetAcce(acce)
5) In def SelectSlot definition, after:
Spoilerhair = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_HAIR)
5.1) add:
Spoileracce = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_ACCE)
6) Also there, replace this:
Spoilerself.MakeCharacter(index, id, name, race, form, hair)
6.1) with this:
Spoilerself.MakeCharacter(index, id, name, race, form, hair, acce)
Enjoy.
- 1
-
7 hours ago, TheJacob said:
Yes, I use my binary... But why If i have effect.eix/epk (size 3 633kb) and extract and now compile size is 3 541kb...
What can I to do to use repacked original files and launch game?
I really don't know how to explain that, but your crypter have different resources and different files in there. Original crypter from Ymir, it's from their own source, so I do not think that files are different, just the way is crypted.
- 1
-
3 hours ago, TheJacob said:
Hallo,
I need help repack metin2 files...
I have official client metin2 (2014/2015) i change root.eix/epk and libs... and start. All successful run. If I extract effect.eix/epk and compile(package) to effect.eix/epk and run client error if I login...
What i make bad? This isnt only effect, but PC, PC2, Monster2.... Where is error? Compiler?
I need repack all official files...
Thx for any help. TheJacob
I guess you're using your own binary, right? If you're not, then, official launcher just read the original size of these files or CRC, or anything else to crypt that datas. So, it'll not be working.
-
7 hours ago, Uyas said:
For me bonuses not working in type 33.
Type 33 doesn't read the bonuses like ITEM_UNIQUE does, from special_item_group.txt, you need to APPLY bonuses from item proto.
-
On 4/13/2016 at 8:22 PM, Uyas said:
You can add as you can do to work bonuses type 33 ?
I don't understand you. You want to say to add C++ part for items type 33 to read special_item_group.txt bonuses?
-
23 minutes ago, Alcatraz ツ said:
Hi Guys,
I have a question and although I wanted to introduce a new system options that you can choose whether to have day or night. I ever was tried but so far nothing works. When I click Sysmteoption closes my client and I get an error. The syserr I write purely down. If anyone can help me please send me a PN.
Thank you very much.
0414 18:18:27713 :: CEffectManager::RegisterEffect - LoadScript(effekte/tweet.mse) Error 0414 18:18:27714 :: CInstanceBase::RegisterEffect(eEftType=121, c_szEftAttachBone=Bip01, c_szEftName=effekte/tweet.mse, isCache=0) - Error 0414 18:18:27727 :: CTextFileLoader::LoadGroup : must have a value (filename: D:/ymir work/pc/common/effect/armor/duest1.dds line: 2 key: ‚aÿï) 0414 18:18:28601 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/yongsinuipi_make.mse line: 0 key: ) 0414 18:18:28617 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/yongsinuichukbok_make.mse line: 0 key: ) 0414 18:18:28627 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/seonghwigap_make.mse line: 0 key: ) 0414 18:18:28637 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/gasokhwa_make.mse line: 0 key: ) 0414 18:18:28646 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/yongsinuibunno_make.mse line: 0 key: ) 0414 18:18:28656 :: CTextFileLoader::LoadGroup : must have a value (filename: d:/ymir work/guild/effect/jumunsul_make.mse line: 0 key: ) 0414 18:18:43493 :: Unknown Server Command AfkButton 86 | AfkButton 0414 18:18:58334 :: uiGameOption.py(line:94) __Load_BindObject OptionDialog.__Load_BindObject - <type 'exceptions.AttributeError'>:'OptionDialog' object has no attribute 'ModusTagTextButtonList' 0414 18:18:58334 :: ============================================================================================================ 0414 18:18:58334 :: Abort!!!! 0414 18:18:58335 :: uiSystem.py(line:66) __ClickSystemButton uiGameOption.py(line:28) __init__ uiGameOption.py(line:115) __Load uiGameOption.py(line:106) __Load_BindObject exception.py(line:36) Abort SystemDialog.__LoadSystem.__ClickSystemButton - <type 'exceptions.SystemExit'>: 0414 18:18:58335 :: ============================================================================================================ 0414 18:18:58335 :: Abort!!!!
Look at this problem:
SpoilerOptionDialog.__Load_BindObject - <type 'exceptions.AttributeError'>:'OptionDialog' object has no attribute 'ModusTagTextButtonList'
your python files reads module
Spoiler'ModusTagTextButtonList'
but this module DOES NOT exist in uiscript files, so you can't enter in those menus.
-
34 minutes ago, TyWin said:
Hello everyone. I want to ask if you can edit one thing, that actually "hurts" me right now ^^.
Costume_mount works for me good but I have only 1 trouble with it. When I attack I can't ride it. It's like older version of mounts on Metin2 official.
Can someone help me with removing this blockation?
Image: https://metin2.download/picture/l9PH6Z0s7JgPPT1Z3uJSgg9swwOMEeBN/.png
Somehow, that mounts, Dragor, in your case, I think, in the past they had ITEM_QUEST type, and then, you don't have to equip them in inventory slots. Now, you have ITEM_COSTUME type, costumes needs to be in inventory. So, if you are on floor and you attack anything, you CAN NOT equip the mount untill you'll stop attacking.
-
4 minutes ago, stevenmelis said:
Thank you. Nice support
Example in item_proto, with bonuses:
Spoiler71143 ÇŕşąŔÇ ąÝÁö ITEM_RING 0 1 ANTI_DROP | ANTI_STACK NONE WEAR_SHIELD NONE 0 0 0 0 0 REAL_TIME 604800 LIMIT_NONE 0 APPLY_ATT_GRADE_BONUS 150 APPLY_DEF_GRADE_BONUS 150 APPLY_MAX_HP 1800 0 0 0 0 0 0 0 0 0
Dragon Soul Active Slot Effect Inventory
in Community Support - Questions & Answers
Posted · Edited by Metin2 Dev International
Core X - External 2 Internal
I'm back maybe with an explanation, I think? :)) Maybe the problem is caused because of public_effect.dds file which doesn't have those small buttons, someone could help with it if they have it?
postimg