Bitte melden Sie sich an, um diesen Link zu sehen.
Beiträge von Tigrex
-
-
Can you share Safebox.cpp? I have only that old and Mali reworked Safebox is actually lost..
C- #include "stdafx.h"
- #include "../../libgame/src/grid.h"
- #include "constants.h"
- #include "safebox.h"
- #include "packet.h"
- #include "char.h"
- #include "desc_client.h"
- #include "item.h"
- #include "item_manager.h"
- CSafebox::CSafebox(LPCHARACTER pkChrOwner, int iSize, long long lldGold) : m_pkChrOwner(pkChrOwner), m_iSize(iSize), m_lldGold(lldGold)
- {
- assert(m_pkChrOwner);
- memset(m_pkItems, 0, sizeof(m_pkItems));
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- for (DWORD i = 0; i < m_iSize / 9; i++)
- v_Grid.emplace_back(std::make_shared<CGrid>(10, 9));
- #else
- for (BYTE i = 0; i < m_iSize / 9; i++)
- v_Grid.emplace_back(std::make_shared<CGrid>(5, 9));
- #endif
- m_bWindowMode = SAFEBOX;
- }
- CSafebox::~CSafebox()
- {
- __Destroy();
- }
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- static DWORD PosToPage(DWORD dwPos)
- {
- return static_cast<DWORD>(dwPos / 90);
- }
- #else
- static BYTE PosToPage(DWORD dwPos)
- {
- return static_cast<BYTE>(dwPos / 45);
- }
- #endif
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- static DWORD PosToLocal(DWORD dwPos, DWORD Page)
- {
- return static_cast<DWORD>(dwPos - (90 * Page));
- }
- #else
- static BYTE PosToLocal(DWORD dwPos, BYTE Page)
- {
- return static_cast<BYTE>(dwPos - (45 * Page));
- }
- #endif
- void CSafebox::SetWindowMode(BYTE bMode)
- {
- m_bWindowMode = bMode;
- }
- void CSafebox::__Destroy()
- {
- for (int i = 0; i < SAFEBOX_MAX_NUM; ++i) {
- if (m_pkItems[i]) {
- m_pkItems[i]->SetSkipSave(true);
- ITEM_MANAGER::instance().FlushDelayedSave(m_pkItems[i]);
- M2_DESTROY_ITEM(m_pkItems[i]->RemoveFromCharacter());
- m_pkItems[i] = NULL;
- }
- }
- v_Grid.clear();
- }
- bool CSafebox::Add(DWORD dwPos, LPITEM pkItem)
- {
- if (!IsValidPosition(dwPos))
- {
- sys_err("SAFEBOX: item on wrong position at %d (size of grid = %d)", dwPos, GetGridTotalSize());
- return false;
- }
- pkItem->SetWindow(m_bWindowMode);
- pkItem->SetCell(m_pkChrOwner, static_cast<WORD>(dwPos));
- pkItem->Save();
- ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- const DWORD Page = PosToPage(dwPos);
- #else
- const BYTE Page = PosToPage(dwPos);
- #endif
- if (Page >= v_Grid.size())
- return false;
- v_Grid.at(Page)->Put(PosToLocal(dwPos, Page), 1, pkItem->GetSize());
- m_pkItems[dwPos] = pkItem;
- TPacketGCItemSet pack;
- pack.header = m_bWindowMode == SAFEBOX ? HEADER_GC_SAFEBOX_SET : HEADER_GC_MALL_SET;
- pack.Cell = TItemPos(m_bWindowMode, static_cast<WORD>(dwPos));
- pack.vnum = pkItem->GetVnum();
- pack.count = static_cast<WORD>(pkItem->GetCount());
- #ifdef ENABLE_RARITY_SYSTEM
- pack.bRarity = pkItem->GetRarity();
- #endif
- pack.flags = pkItem->GetFlag();
- pack.anti_flags = pkItem->GetAntiFlag();
- thecore_memcpy(pack.alSockets, pkItem->GetSockets(), sizeof(pack.alSockets));
- thecore_memcpy(pack.aAttr, pkItem->GetAttributes(), sizeof(pack.aAttr));
- m_pkChrOwner->GetDesc()->Packet(&pack, sizeof(pack));
- sys_log(1, "SAFEBOX: ADD %s %s count %d", m_pkChrOwner->GetName(), pkItem->GetName(), pkItem->GetCount());
- return true;
- }
- LPITEM CSafebox::Get(DWORD dwPos)
- {
- if (dwPos >= GetGridTotalSize())
- return nullptr;
- return m_pkItems[dwPos];
- }
- LPITEM CSafebox::Remove(DWORD dwPos)
- {
- LPITEM pkItem = Get(dwPos);
- if (!pkItem)
- return nullptr;
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- const DWORD Page = PosToPage(dwPos);
- #else
- const BYTE Page = PosToPage(dwPos);
- #endif
- if (!v_Grid.empty() && Page < v_Grid.size())
- v_Grid.at(Page)->Get(PosToLocal(dwPos, Page), 1, pkItem->GetSize());
- pkItem->RemoveFromCharacter();
- m_pkItems[dwPos] = nullptr;
- TPacketGCItemDel pack;
- pack.header = m_bWindowMode == SAFEBOX ? HEADER_GC_SAFEBOX_DEL : HEADER_GC_MALL_DEL;
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- pack.pos = static_cast<DWORD>(dwPos);
- #else
- pack.pos = static_cast<BYTE>(dwPos);
- #endif
- m_pkChrOwner->GetDesc()->Packet(&pack, sizeof(pack));
- sys_log(1, "SAFEBOX: REMOVE %s %s count %d", m_pkChrOwner->GetName(), pkItem->GetName(), pkItem->GetCount());
- return pkItem;
- }
- void CSafebox::Save()
- {
- TSafeboxTable t;
- memset(&t, 0, sizeof(TSafeboxTable));
- t.dwID = m_pkChrOwner->GetDesc()->GetAccountTable().id;
- t.lldGold = m_lldGold;
- db_clientdesc->DBPacket(HEADER_GD_SAFEBOX_SAVE, 0, &t, sizeof(TSafeboxTable));
- sys_log(1, "SAFEBOX: SAVE %s", m_pkChrOwner->GetName());
- }
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- bool CSafebox::IsEmpty(DWORD dwPos, DWORD bSize)
- #else
- bool CSafebox::IsEmpty(DWORD dwPos, BYTE bSize)
- #endif
- {
- if (v_Grid.empty())
- return false;
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- const DWORD Page = PosToPage(dwPos);
- #else
- const BYTE Page = PosToPage(dwPos);
- #endif
- if (Page >= v_Grid.size())
- return false;
- return v_Grid.at(Page)->IsEmpty(PosToLocal(dwPos, Page), 1, bSize);
- }
- #if defined(ITEM_CHECKINOUT_UPDATE)
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- int CSafebox::GetEmptySafebox(DWORD size)
- #else
- int CSafebox::GetEmptySafebox(BYTE size)
- #endif
- {
- if (v_Grid.empty())
- return -1;
- for (unsigned int i = 0; i < GetGridTotalSize(); i++)
- if (IsEmpty(i, size))
- return i;
- return -1;
- }
- #endif
- void CSafebox::ChangeSize(int iSize)
- {
- return;
- }
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- LPITEM CSafebox::GetItem(DWORD bCell)
- #else
- LPITEM CSafebox::GetItem(BYTE bCell)
- #endif
- {
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- if (bCell >= 10 * m_iSize)
- {
- sys_err("CHARACTER::GetItem: invalid item cell %d", bCell);
- return NULL;
- }
- #else
- if (bCell >= 5 * m_iSize)
- {
- sys_err("CHARACTER::GetItem: invalid item cell %d", bCell);
- return NULL;
- }
- #endif
- return m_pkItems[bCell];
- }
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- bool CSafebox::MoveItem(DWORD bCell, DWORD bDestCell, WORD count)
- #else
- bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, WORD count)
- #endif
- {
- LPITEM item;
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- int max_position = 10 * m_iSize;
- #else
- int max_position = 5 * m_iSize;
- #endif
- if (bCell >= max_position || bDestCell >= max_position)
- return false;
- if (!(item = GetItem(bCell)))
- return false;
- if (item->IsExchanging())
- return false;
- if (item->GetCount() < count)
- return false;
- {
- LPITEM item2;
- if ((item2 = GetItem(bDestCell)) && item != item2 && item2->IsStackable() &&
- !IS_SET(item2->GetAntiFlag(), ITEM_ANTIFLAG_STACK) &&
- item2->GetVnum() == item->GetVnum())
- {
- for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
- if (item2->GetSocket(i) != item->GetSocket(i))
- return false;
- if (count == 0)
- count = static_cast<WORD>(item->GetCount());
- count = MIN(MAX_ITEM_STACK - item2->GetCount(), count);
- if (item->GetCount() >= count)
- Remove(bCell);
- item->SetCount(item->GetCount() - count);
- item2->SetCount(item2->GetCount() + count);
- sys_log(1, "SAFEBOX: STACK %s %d -> %d %s count %d", m_pkChrOwner->GetName(), bCell, bDestCell, item2->GetName(), item2->GetCount());
- return true;
- }
- if (!IsEmpty(bDestCell, item->GetSize()))
- return false;
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- const DWORD Page1 = PosToPage(bCell), Page2 = PosToPage(bDestCell);
- #else
- const BYTE Page1 = PosToPage(bCell), Page2 = PosToPage(bDestCell);
- #endif
- if (Page1 >= v_Grid.size() || Page2 >= v_Grid.size())
- return false;
- v_Grid.at(Page1)->Get(PosToLocal(bCell, Page1), 1, item->GetSize());
- if (!v_Grid.at(Page2)->Put(PosToLocal(bDestCell, Page2), 1, item->GetSize()))
- {
- v_Grid.at(Page1)->Put(PosToLocal(bCell, Page1), 1, item->GetSize());
- return false;
- }
- else
- {
- v_Grid.at(Page2)->Get(PosToLocal(bDestCell, Page2), 1, item->GetSize());
- v_Grid.at(Page1)->Put(PosToLocal(bCell, Page1), 1, item->GetSize());
- }
- sys_log(1, "SAFEBOX: MOVE %s %d -> %d %s count %d", m_pkChrOwner->GetName(), bCell, bDestCell, item->GetName(), item->GetCount());
- Remove(bCell);
- Add(bDestCell, item);
- }
- return true;
- }
- unsigned int CSafebox::GetGridTotalSize() const
- {
- #if defined(ENABLE_EXTENDED_SAFEBOX)
- return v_Grid.size() * 90;
- #else
- return v_Grid.size() * 45;
- #endif
- }
- bool CSafebox::IsValidPosition(DWORD dwPos)
- {
- if (v_Grid.empty())
- return false;
- if (dwPos >= GetGridTotalSize())
- return false;
- return true;
- }
-
Wo war eig. im Client Src das Grid für das normale Lager zum ansteuern?
Das Inventar kann man ansteuern, aber glaub das Lager ist einfach nur Python und Serversource?
Kommt ganz darauf an was du ändern möchtest, im tut ist eigentlich alles beschrieben.
client src : UserInterface -> PythonSafeBox.cpp -
Moin,
habe auf meiner Festplatte das Extended Safebox System von blackdragonx61 gefunden und da ich es nirgends mehr online gefunden habe Re-Uploade ich es hier.
Das ganze habe ich erweitert für Standard 3 Seiten mit jeweils 90 Slots pro Seite, und wenn man die Premium Version hat "DB -> account -> safebox_expire"
stehen einem sogar 6 Seiten zur Verfügung.Natürlich könnt ihr das easy erweitern, wer die Mall nutzt muss das ganze für die Mall erweitern ist aber easy.
Ohne den Eintrag "safebox_expire"
Bitte melden Sie sich an, um dieses Bild zu sehen.
Mit den Eintrag "safebox_expire"
Bitte melden Sie sich an, um dieses Bild zu sehen.
Big Thanks to blackdragonx61
-
Bester Mann, die Qualität mit der er die Designs erstellt ist einfach super.
Auch wenn ich sehr picky bin mit meinen Vorstellungen wurden diese immer Umgesetzt,
ich kann den Service absolut weiterempfehlen. 10 / 10
-
Hallo,
nach einer langen Pause wollte ich mich nun wieder der Metin2-P-Server-Szene widmen.
Ich habe zuvor mit den Fliegev3-Dateien gearbeitet, die mir Fliege selbst zukommen lassen hat. Nun wollte ich jedoch, da bereits einige Systeme in den v3-Dateien verbaut sind, auf "cleanere" Serverfiles zurückgreifen.
Dabei bin ich auf die TMP4-Dateien "2014 Files" gestoßen, die mir wirklich gefallen. Ich frage mich, ist es mit viel Aufwand verbunden, diese so umzustrukturieren, dass sie wie die Fliegev3-Dateien aufgebaut sind?
Und kennt sich jemand damit aus, wie ich die Files unter Windows live debuggen kann?
Wäre echt super wenn mir jemand dabei helfen könnte
Link zu dem Files von TMP4 -> Bitte melden Sie sich an, um diesen Link zu sehen.
-
add mich mal auf discord ich mach dir das morgen.
-
Moin, habe soeben ein Problem mit dem System bekommen.
Eventuell kann mir wer helfen.
FehlercodeCode- 0420 22:08:02677 :: Traceback (most recent call last):
- 0420 22:08:02677 :: File "ui.py", line 1370, in OnMouseOverIn
- 0420 22:08:02678 :: AttributeError
- 0420 22:08:02678 :: :
- 0420 22:08:02678 :: 'MiddleBar' object has no attribute 'overFunc'
- 0420 22:08:02678 ::
- 0420 22:08:03584 :: Traceback (most recent call last):
- 0420 22:08:03584 :: File "ui.py", line 1374, in OnMouseOverOut
- 0420 22:08:03584 :: AttributeError
- 0420 22:08:03584 :: :
- 0420 22:08:03584 :: 'MiddleBar' object has no attribute 'overOutFunc'
- 0420 22:08:03584 ::
- 0420 22:08:05069 :: Traceback (most recent call last)
Das wären die 2 Zeilen.
Poste doch mal bitte den Part von deiner MiddleBar.
-
So habe mir den Client jetzt auch mal geladen, als erstes Eskaliert bei mir der Windows Defender in euren Patcher rein, selbst wenn dieser aus ist kann ich den Client nicht Patchen da steht permanent Check Client Files 0 %. Da sich so euer Client nicht Starten lies musste ich eure Tolles: Bitte melden Sie sich an, um dieses Bild zu sehen. umgehen.
Nachdem Ich mir dann von einem Kollegen einen Gepatchten Client habe hochladen lassen, und ich endlich ingame bin nach geschlagenen 40 Minuten ....
Fallen mir direkt Sachen auf.
1. Euer Client Crasht wenn man Screenshots machen will.
2. Euere Nebel Funktion hat keine Funktion:
Bild mit Viel Nebel:
Bitte melden Sie sich an, um dieses Bild zu sehen.
Bild mit Wenig Nebel:
Bitte melden Sie sich an, um dieses Bild zu sehen.
3. Ihr habt an vielen Stellen auf euren Maps schatten ohne das Dort Objekte sind:
Bitte melden Sie sich an, um dieses Bild zu sehen.
Das ist glaube soweit alles was mir nach 2 Minuten Ingame aufgefallen ist.
Das sind alles Features das ist so gewollt, da ist ja soooo viel zeit reingeflossen in den Server die ganze Jahre lange Entwicklung.
-
Scheint wohl dezent Buggy bei dir zu sein.
Bitte melden Sie sich an, um diesen Link zu sehen.
Nein scheint es nicht.
Bitte melden Sie sich an, um dieses Bild zu sehen.€: Finde den Server immer noch kacke
Uff das UI geht gar nicht, eine Woche mehr zu investieren um alles zu überprüfen hätte nicht geschadet.
Dennoch viel Erfolg!
edit: Die Homepage sieht aber gut aus vom Design.
-
Nice system, works without any problems
-
Hay bei mir ist heute aufgefallen das einige Bonis bei mir ingame falsch angezeigt werden wie z.b. hier.
Bitte melden Sie sich an, um diesen Link zu sehen.
Liegt es evtl. an meinem dumper ?
-
Hay ich habe einen Fehler wo mir beim verkaufen das falsche item angezeigt wird. Und zwar immer das item, dass auf dem zweiten Slot im Inventar liegt. vielleicht weiß einer von euch wo da der Wurm drinsteckt.
Bitte melden Sie sich an, um diesen Link zu sehen.game.py
Code- import os
- import app
- import dbg
- import grp
- import item
- import background
- import chr
- import chrmgr
- import player
- import snd
- import chat
- import textTail
- import snd
- import net
- import effect
- import wndMgr
- import fly
- import systemSetting
- import quest
- import guild
- import skill
- import messenger
- import localeInfo
- import constInfo
- import exchange
- import ime
- import uisidebar
- from switchbot import Bot
- import ui
- import uiCommon
- import uiPhaseCurtain
- import uiMapNameShower
- import uiAffectShower
- import uiPlayerGauge
- import uiCharacter
- import uiTarget
- # PRIVATE_SHOP_PRICE_LIST
- import uiPrivateShopBuilder
- # END_OF_PRIVATE_SHOP_PRICE_LIST
- import mouseModule
- import consoleModule
- import localeInfo
- import playerSettingModule
- import interfaceModule
- import musicInfo
- import debugInfo
- import stringCommander
- from _weakref import proxy
- # TEXTTAIL_LIVINGTIME_CONTROL
- #if localeInfo.IsJAPAN():
- # app.SetTextTailLivingTime(8.0)
- # END_OF_TEXTTAIL_LIVINGTIME_CONTROL
- # SCREENSHOT_CWDSAVE
- SCREENSHOT_CWDSAVE = FALSE
- SCREENSHOT_DIR = None
- if localeInfo.IsEUROPE():
- SCREENSHOT_CWDSAVE = TRUE
- if localeInfo.IsCIBN10():
- SCREENSHOT_CWDSAVE = FALSE
- SCREENSHOT_DIR = "YT2W"
- ##DAILY_REWARD_SYSTEM
- if app.ENABLE_DAILY_REWARD:
- import uidailyreward
- cameraDistance = 1550.0
- cameraPitch = 27.0
- cameraRotation = 0.0
- cameraHeight = 100.0
- testAlignment = 0
- class GameWindow(ui.ScriptWindow):
- def __init__(self, stream):
- ui.ScriptWindow.__init__(self, "GAME")
- self.SetWindowName("game")
- net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self)
- player.SetGameWindow(self)
- #Tag_Nacht_System
- constInfo.Nacht = 0
- constInfo.Tag = 0
- #Tag_Nacht_System_Ende
- ###DAILY_REWARD_SYSTEM
- if app.ENABLE_DAILY_REWARD:
- self.dailyReward = None
- if app.ENABLE_DAILY_REWARD:
- self.dailyReward = uidailyreward.DailyRewardWindow()
- self.dailyReward.Hide()
- ###DAILY_REWARD_SYSTEM_ENDE
- self.quickSlotPageIndex = 0
- self.lastPKModeSendedTime = 0
- self.pressNumber = None
- self.guildWarQuestionDialog = None
- self.interface = None
- self.targetBoard = None
- self.console = None
- self.mapNameShower = None
- self.affectShower = None
- self.playerGauge = None
- self.stream=stream
- self.interface = interfaceModule.Interface()
- self.interface.MakeInterface()
- self.interface.ShowDefaultWindows()
- self.curtain = uiPhaseCurtain.PhaseCurtain()
- self.curtain.speed = 0.03
- self.curtain.Hide()
- self.targetBoard = uiTarget.TargetBoard()
- self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog))
- self.targetBoard.Hide()
- self.console = consoleModule.ConsoleWindow()
- self.console.BindGameClass(self)
- self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200)
- self.console.Hide()
- self.mapNameShower = uiMapNameShower.MapNameShower()
- self.affectShower = uiAffectShower.AffectShower()
- self.playerGauge = uiPlayerGauge.PlayerGauge(self)
- self.playerGauge.Hide()
- self.itemDropQuestionDialog = None
- self.__SetQuickSlotMode()
- self.__ServerCommand_Build()
- self.__ProcessPreservedServerCommand()
- ###Side_Bar_Start
- self.sideBar = uisidebar.SideBar()
- self.sideBar.Show()
- ###Side_Bar_Buttons
- self.sideBar.AddButton("Amkira2 Shop", self.OpenItemShopInGame)
- self.sideBar.AddButton("Screenshot", self.SaveScreen)
- self.sideBar.AddButton("Screenshot", self.SaveScreen)
- self.sideBar.AddButton("Screenshot", self.SaveScreen)
- ###Side_Bar_Ende###
- self.switchbot = Bot()
- self.switchbot.Hide()
- def __del__(self):
- player.SetGameWindow(0)
- net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self)
- ui.ScriptWindow.__del__(self)
- def Open(self):
- app.SetFrameSkip(1)
- self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
- self.quickSlotPageIndex = 0
- self.PickingCharacterIndex = -1
- self.PickingItemIndex = -1
- self.consoleEnable = FALSE
- self.isShowDebugInfo = FALSE
- self.ShowNameFlag = FALSE
- self.enableXMasBoom = FALSE
- self.startTimeXMasBoom = 0.0
- self.indexXMasBoom = 0
- global cameraDistance, cameraPitch, cameraRotation, cameraHeight
- app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight)
- constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE()
- constInfo.SET_DEFAULT_CHRNAME_COLOR()
- constInfo.SET_DEFAULT_FOG_LEVEL()
- constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE()
- constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS()
- constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE()
- # TWO_HANDED_WEAPON_ATTACK_SPEED_UP
- constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE()
- # END_OF_TWO_HANDED_WEAPON_ATTACK_SPEED_UP
- import event
- event.SetLeftTimeString(localeInfo.UI_LEFT_TIME)
- textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE)
- if constInfo.PVPMODE_TEST_ENABLE:
- self.testPKMode = ui.TextLine()
- self.testPKMode.SetFontName(localeInfo.UI_DEF_FONT)
- self.testPKMode.SetPosition(0, 15)
- self.testPKMode.SetWindowHorizontalAlignCenter()
- self.testPKMode.SetHorizontalAlignCenter()
- self.testPKMode.SetFeather()
- self.testPKMode.SetOutline()
- self.testPKMode.Show()
- self.testAlignment = ui.TextLine()
- self.testAlignment.SetFontName(localeInfo.UI_DEF_FONT)
- self.testAlignment.SetPosition(0, 35)
- self.testAlignment.SetWindowHorizontalAlignCenter()
- self.testAlignment.SetHorizontalAlignCenter()
- self.testAlignment.SetFeather()
- self.testAlignment.SetOutline()
- self.testAlignment.Show()
- self.__BuildKeyDict()
- self.__BuildDebugInfo()
- # PRIVATE_SHOP_PRICE_LIST
- uiPrivateShopBuilder.Clear()
- # END_OF_PRIVATE_SHOP_PRICE_LIST
- # UNKNOWN_UPDATE
- exchange.InitTrading()
- # END_OF_UNKNOWN_UPDATE
- if debugInfo.IsDebugMode():
- self.ToggleDebugInfo()
- ## Sound
- snd.SetMusicVolume(systemSetting.GetMusicVolume()*net.GetFieldMusicVolume())
- snd.SetSoundVolume(systemSetting.GetSoundVolume())
- netFieldMusicFileName = net.GetFieldMusicFileName()
- if netFieldMusicFileName:
- snd.FadeInMusic("BGM/" + netFieldMusicFileName)
- elif musicInfo.fieldMusic != "":
- snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
- self.__SetQuickSlotMode()
- self.__SelectQuickPage(self.quickSlotPageIndex)
- self.SetFocus()
- self.Show()
- app.ShowCursor()
- net.SendEnterGamePacket()
- # START_GAME_ERROR_EXIT
- try:
- self.StartGame()
- except:
- import exception
- exception.Abort("GameWindow.Open")
- # END_OF_START_GAME_ERROR_EXIT
- # NPC°¡ Å¥ºê½Ã½ºÅÛÀ¸·Î ¸¸µé ¼ö ÀÖ´Â ¾ÆÀÌÅÛµéÀÇ ¸ñ·ÏÀ» ij½Ì
- # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ]
- self.cubeInformation = {}
- self.currentCubeNPC = 0
- def Close(self):
- self.Hide()
- global cameraDistance, cameraPitch, cameraRotation, cameraHeight
- (cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera()
- if musicInfo.fieldMusic != "":
- snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic)
- self.onPressKeyDict = None
- self.onClickKeyDict = None
- chat.Close()
- snd.StopAllSound()
- grp.InitScreenEffect()
- chr.Destroy()
- textTail.Clear()
- quest.Clear()
- background.Destroy()
- guild.Destroy()
- messenger.Destroy()
- skill.ClearSkillData()
- wndMgr.Unlock()
- mouseModule.mouseController.DeattachObject()
- if self.guildWarQuestionDialog:
- self.guildWarQuestionDialog.Close()
- self.guildNameBoard = None
- self.partyRequestQuestionDialog = None
- self.partyInviteQuestionDialog = None
- self.guildInviteQuestionDialog = None
- self.guildWarQuestionDialog = None
- self.messengerAddFriendQuestion = None
- # UNKNOWN_UPDATE
- self.itemDropQuestionDialog = None
- # END_OF_UNKNOWN_UPDATE
- # QUEST_CONFIRM
- self.confirmDialog = None
- # END_OF_QUEST_CONFIRM
- self.PrintCoord = None
- self.FrameRate = None
- self.Pitch = None
- self.Splat = None
- self.TextureNum = None
- self.ObjectNum = None
- self.ViewDistance = None
- self.PrintMousePos = None
- self.ClearDictionary()
- self.playerGauge = None
- self.mapNameShower = None
- self.affectShower = None
- if self.console:
- self.console.BindGameClass(0)
- self.console.Close()
- self.console=None
- if self.targetBoard:
- self.targetBoard.Destroy()
- self.targetBoard = None
- if self.interface:
- self.interface.HideAllWindows()
- self.interface.Close()
- self.interface=None
- ###DAILY_REWARD_SYSTEM
- if app.ENABLE_DAILY_REWARD and self.dailyReward:
- self.dailyReward.Destroy()
- self.dailyReward = None
- player.ClearSkillDict()
- player.ResetCameraRotation()
- ###Side_Bar_Start
- self.sideBar.Destroy()
- self.sideBar = None
- ###Side_BarEnde
- self.KillFocus()
- app.HideCursor()
- print "---------------------------------------------------------------------------- CLOSE GAME WINDOW"
- def __BuildKeyDict(self):
- onPressKeyDict = {}
- ##PressKey ´Â ´©¸£°í ÀÖ´Â µ¿¾È °è¼Ó Àû¿ëµÇ´Â Å°ÀÌ´Ù.
- ## ¼ýÀÚ ´ÜÃàÅ° Äü½½·Ô¿¡ ÀÌ¿ëµÈ´Ù.(ÀÌÈÄ ¼ýÀڵ鵵 Äü ½½·Ô¿ë ¿¹¾à)
- ## F12 ´Â Ŭ¶ó µð¹ö±×¿ë Å°À̹ǷΠ¾²Áö ¾Ê´Â °Ô ÁÁ´Ù.
- onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1)
- onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2)
- onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3)
- onPressKeyDict[app.DIK_4] = lambda : self.__PressNumKey(4)
- onPressKeyDict[app.DIK_5] = lambda : self.__PressNumKey(5)
- onPressKeyDict[app.DIK_6] = lambda : self.__PressNumKey(6)
- onPressKeyDict[app.DIK_7] = lambda : self.__PressNumKey(7)
- onPressKeyDict[app.DIK_8] = lambda : self.__PressNumKey(8)
- onPressKeyDict[app.DIK_9] = lambda : self.__PressNumKey(9)
- onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4)
- onPressKeyDict[app.DIK_F2] = lambda : self.__PressQuickSlot(5)
- onPressKeyDict[app.DIK_F3] = lambda : self.__PressQuickSlot(6)
- onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7)
- onPressKeyDict[app.DIK_F5] = lambda : self.__nopickInfo()
- onPressKeyDict[app.DIK_F6] = lambda : self.__toggleSwitchbot()
- onPressKeyDict[app.DIK_LALT] = lambda : self.ShowName()
- onPressKeyDict[app.DIK_LCONTROL] = lambda : self.ShowMouseImage()
- onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen()
- onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack()
- #ij¸¯ÅÍ À̵¿Å°
- onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp()
- onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown()
- onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft()
- onPressKeyDict[app.DIK_RIGHT] = lambda : self.MoveRight()
- onPressKeyDict[app.DIK_W] = lambda : self.MoveUp()
- onPressKeyDict[app.DIK_S] = lambda : self.MoveDown()
- onPressKeyDict[app.DIK_A] = lambda : self.MoveLeft()
- onPressKeyDict[app.DIK_D] = lambda : self.MoveRight()
- onPressKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_TO_POSITIVE)
- onPressKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_TO_NEGATIVE)
- #onPressKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE)
- onPressKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_TO_NEGATIVE)
- onPressKeyDict[app.DIK_G] = self.__PressGKey
- onPressKeyDict[app.DIK_Q] = self.__PressQKey
- onPressKeyDict[app.DIK_NUMPAD9] = lambda: app.MovieResetCamera()
- onPressKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE)
- onPressKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_TO_POSITIVE)
- onPressKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE)
- onPressKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_TO_POSITIVE)
- onPressKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE)
- onPressKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_TO_POSITIVE)
- onPressKeyDict[app.DIK_GRAVE] = lambda : self.PickUpItem()
- onPressKeyDict[app.DIK_Z] = lambda : self.PickUpItem()
- onPressKeyDict[app.DIK_C] = lambda state = "STATUS": self.interface.ToggleCharacterWindow(state)
- onPressKeyDict[app.DIK_V] = lambda state = "SKILL": self.interface.ToggleCharacterWindow(state)
- #onPressKeyDict[app.DIK_B] = lambda state = "EMOTICON": self.interface.ToggleCharacterWindow(state)
- onPressKeyDict[app.DIK_N] = lambda state = "QUEST": self.interface.ToggleCharacterWindow(state)
- onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow()
- onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo()
- onPressKeyDict[app.DIK_M] = lambda : self.interface.PressMKey()
- #onPressKeyDict[app.DIK_H] = lambda : self.interface.OpenHelpWindow()
- onPressKeyDict[app.DIK_ADD] = lambda : self.interface.MiniMapScaleUp()
- onPressKeyDict[app.DIK_SUBTRACT] = lambda : self.interface.MiniMapScaleDown()
- onPressKeyDict[app.DIK_L] = lambda : self.interface.ToggleChatLogWindow()
- onPressKeyDict[app.DIK_COMMA] = lambda : self.ShowConsole() # "`" key
- onPressKeyDict[app.DIK_LSHIFT] = lambda : self.__SetQuickPageMode()
- onPressKeyDict[app.DIK_J] = lambda : self.__PressJKey()
- onPressKeyDict[app.DIK_H] = lambda : self.__PressHKey()
- onPressKeyDict[app.DIK_B] = lambda : self.__PressBKey()
- onPressKeyDict[app.DIK_F] = lambda : self.__PressFKey()
- # CUBE_TEST
- #onPressKeyDict[app.DIK_K] = lambda : self.interface.OpenCubeWindow()
- # CUBE_TEST_END
- self.onPressKeyDict = onPressKeyDict
- onClickKeyDict = {}
- onClickKeyDict[app.DIK_UP] = lambda : self.StopUp()
- onClickKeyDict[app.DIK_DOWN] = lambda : self.StopDown()
- onClickKeyDict[app.DIK_LEFT] = lambda : self.StopLeft()
- onClickKeyDict[app.DIK_RIGHT] = lambda : self.StopRight()
- onClickKeyDict[app.DIK_SPACE] = lambda : self.EndAttack()
- onClickKeyDict[app.DIK_W] = lambda : self.StopUp()
- onClickKeyDict[app.DIK_S] = lambda : self.StopDown()
- onClickKeyDict[app.DIK_A] = lambda : self.StopLeft()
- onClickKeyDict[app.DIK_D] = lambda : self.StopRight()
- onClickKeyDict[app.DIK_Q] = lambda: app.RotateCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_G] = lambda: self.__ReleaseGKey()
- onClickKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_STOP)
- onClickKeyDict[app.DIK_LALT] = lambda: self.HideName()
- onClickKeyDict[app.DIK_LCONTROL] = lambda: self.HideMouseImage()
- onClickKeyDict[app.DIK_LSHIFT] = lambda: self.__SetQuickSlotMode()
- #if constInfo.PVPMODE_ACCELKEY_ENABLE:
- # onClickKeyDict[app.DIK_B] = lambda: self.ChangePKMode()
- self.onClickKeyDict=onClickKeyDict
- def __PressNumKey(self,num):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- if num >= 1 and num <= 9:
- if(chrmgr.IsPossibleEmoticon(-1)):
- chrmgr.SetEmoticon(-1,int(num)-1)
- net.SendEmoticon(int(num)-1)
- else:
- if num >= 1 and num <= 4:
- self.pressNumber(num-1)
- def __ClickBKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- return
- else:
- if constInfo.PVPMODE_ACCELKEY_ENABLE:
- self.ChangePKMode()
- def __PressJKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- if player.IsMountingHorse():
- net.SendChatPacket("/unmount")
- else:
- #net.SendChatPacket("/user_horse_ride")
- if not uiPrivateShopBuilder.IsBuildingPrivateShop():
- for i in xrange(player.INVENTORY_PAGE_SIZE):
- if player.GetItemIndex(i) in (71114, 71116, 71118, 71120):
- net.SendItemUsePacket(i)
- break
- def __PressHKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- net.SendChatPacket("/user_horse_ride")
- else:
- self.interface.OpenHelpWindow()
- def __PressBKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- net.SendChatPacket("/user_horse_back")
- else:
- state = "EMOTICON"
- self.interface.ToggleCharacterWindow(state)
- def __PressFKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- net.SendChatPacket("/user_horse_feed")
- else:
- app.ZoomCamera(app.CAMERA_TO_POSITIVE)
- def __PressGKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- net.SendChatPacket("/ride")
- else:
- if self.ShowNameFlag:
- self.interface.ToggleGuildWindow()
- else:
- app.PitchCamera(app.CAMERA_TO_POSITIVE)
- def __ReleaseGKey(self):
- app.PitchCamera(app.CAMERA_STOP)
- def __PressQKey(self):
- if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
- if 0==interfaceModule.IsQBHide:
- interfaceModule.IsQBHide = 1
- self.interface.HideAllQuestButton()
- else:
- interfaceModule.IsQBHide = 0
- self.interface.ShowAllQuestButton()
- else:
- app.RotateCamera(app.CAMERA_TO_NEGATIVE)
- def __SetQuickSlotMode(self):
- self.pressNumber=ui.__mem_func__(self.__PressQuickSlot)
- def __SetQuickPageMode(self):
- self.pressNumber=ui.__mem_func__(self.__SelectQuickPage)
- def __PressQuickSlot(self, localSlotIndex):
- if localeInfo.IsARABIC():
- if 0 <= localSlotIndex and localSlotIndex < 4:
- player.RequestUseLocalQuickSlot(3-localSlotIndex)
- else:
- player.RequestUseLocalQuickSlot(11-localSlotIndex)
- else:
- player.RequestUseLocalQuickSlot(localSlotIndex)
- def __SelectQuickPage(self, pageIndex):
- self.quickSlotPageIndex = pageIndex
- player.SetQuickPage(pageIndex)
- def ToggleDebugInfo(self):
- self.isShowDebugInfo = not self.isShowDebugInfo
- if self.isShowDebugInfo:
- self.PrintCoord.Show()
- self.FrameRate.Show()
- self.Pitch.Show()
- self.Splat.Show()
- self.TextureNum.Show()
- self.ObjectNum.Show()
- self.ViewDistance.Show()
- self.PrintMousePos.Show()
- else:
- self.PrintCoord.Hide()
- self.FrameRate.Hide()
- self.Pitch.Hide()
- self.Splat.Hide()
- self.TextureNum.Hide()
- self.ObjectNum.Hide()
- self.ViewDistance.Hide()
- self.PrintMousePos.Hide()
- def __BuildDebugInfo(self):
- ## Character Position Coordinate
- self.PrintCoord = ui.TextLine()
- self.PrintCoord.SetFontName(localeInfo.UI_DEF_FONT)
- self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0)
- ## Frame Rate
- self.FrameRate = ui.TextLine()
- self.FrameRate.SetFontName(localeInfo.UI_DEF_FONT)
- self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20)
- ## Camera Pitch
- self.Pitch = ui.TextLine()
- self.Pitch.SetFontName(localeInfo.UI_DEF_FONT)
- self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40)
- ## Splat
- self.Splat = ui.TextLine()
- self.Splat.SetFontName(localeInfo.UI_DEF_FONT)
- self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60)
- ##
- self.PrintMousePos = ui.TextLine()
- self.PrintMousePos.SetFontName(localeInfo.UI_DEF_FONT)
- self.PrintMousePos.SetPosition(wndMgr.GetScreenWidth() - 270, 80)
- # TextureNum
- self.TextureNum = ui.TextLine()
- self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT)
- self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
- # ¿ÀºêÁ§Æ® ±×¸®´Â °³¼ö
- self.ObjectNum = ui.TextLine()
- self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT)
- self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120)
- # ½Ã¾ß°Å¸®
- self.ViewDistance = ui.TextLine()
- self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT)
- self.ViewDistance.SetPosition(0, 0)
- def __NotifyError(self, msg):
- chat.AppendChat(chat.CHAT_TYPE_INFO, msg)
- def ChangePKMode(self):
- if not app.IsPressed(app.DIK_LCONTROL):
- return
- if player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL:
- self.__NotifyError(localeInfo.OPTION_PVPMODE_PROTECT % (constInfo.PVPMODE_PROTECTED_LEVEL))
- return
- curTime = app.GetTime()
- if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY:
- return
- self.lastPKModeSendedTime = curTime
- curPKMode = player.GetPKMode()
- nextPKMode = curPKMode + 1
- if nextPKMode == player.PK_MODE_PROTECT:
- if 0 == player.GetGuildID():
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_CANNOT_SET_GUILD_MODE)
- nextPKMode = 0
- else:
- nextPKMode = player.PK_MODE_GUILD
- elif nextPKMode == player.PK_MODE_MAX_NUM:
- nextPKMode = 0
- net.SendChatPacket("/PKMode " + str(nextPKMode))
- print "/PKMode " + str(nextPKMode)
- def OnChangePKMode(self):
- self.interface.OnChangePKMode()
- try:
- self.__NotifyError(localeInfo.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()])
- except KeyError:
- print "UNKNOWN PVPMode[%d]" % (player.GetPKMode())
- if constInfo.PVPMODE_TEST_ENABLE:
- curPKMode = player.GetPKMode()
- alignment, grade = chr.testGetPKData()
- self.pkModeNameDict = { 0 : "PEACE", 1 : "REVENGE", 2 : "FREE", 3 : "PROTECT", }
- self.testPKMode.SetText("Current PK Mode : " + self.pkModeNameDict.get(curPKMode, "UNKNOWN"))
- self.testAlignment.SetText("Current Alignment : " + str(alignment) + " (" + localeInfo.TITLE_NAME_LIST[grade] + ")")
- ###############################################################################################
- ###############################################################################################
- ## Game Callback Functions
- # Start
- def StartGame(self):
- self.RefreshInventory()
- self.RefreshEquipment()
- self.RefreshCharacter()
- self.RefreshSkill()
- # Refresh
- def CheckGameButton(self):
- if self.interface:
- self.interface.CheckGameButton()
- def RefreshAlignment(self):
- self.interface.RefreshAlignment()
- def RefreshStatus(self):
- self.CheckGameButton()
- if self.interface:
- self.interface.RefreshStatus()
- if self.playerGauge:
- self.playerGauge.RefreshGauge()
- def RefreshStamina(self):
- self.interface.RefreshStamina()
- def RefreshSkill(self):
- self.CheckGameButton()
- if self.interface:
- self.interface.RefreshSkill()
- def RefreshQuest(self):
- self.interface.RefreshQuest()
- def RefreshMessenger(self):
- self.interface.RefreshMessenger()
- def RefreshGuildInfoPage(self):
- self.interface.RefreshGuildInfoPage()
- def RefreshGuildBoardPage(self):
- self.interface.RefreshGuildBoardPage()
- def RefreshGuildMemberPage(self):
- self.interface.RefreshGuildMemberPage()
- def RefreshGuildMemberPageGradeComboBox(self):
- self.interface.RefreshGuildMemberPageGradeComboBox()
- def RefreshGuildSkillPage(self):
- self.interface.RefreshGuildSkillPage()
- def RefreshGuildGradePage(self):
- self.interface.RefreshGuildGradePage()
- def RefreshMobile(self):
- if self.interface:
- self.interface.RefreshMobile()
- def OnMobileAuthority(self):
- self.interface.OnMobileAuthority()
- def OnBlockMode(self, mode):
- self.interface.OnBlockMode(mode)
- def OpenQuestWindow(self, skin, idx):
- if constInfo.INPUT_IGNORE == 1:
- net.SendQuestInputStringPacket(str(constInfo.SendString))
- constInfo.INPUT_IGNORE = 0
- else:
- self.interface.OpenQuestWindow(skin, idx)
- def AskGuildName(self):
- guildNameBoard = uiCommon.InputDialog()
- guildNameBoard.SetTitle(localeInfo.GUILD_NAME)
- guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName))
- guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName))
- guildNameBoard.Open()
- self.guildNameBoard = guildNameBoard
- def ConfirmGuildName(self):
- guildName = self.guildNameBoard.GetText()
- if not guildName:
- return
- if net.IsInsultIn(guildName):
- self.PopupMessage(localeInfo.GUILD_CREATE_ERROR_INSULT_NAME)
- return
- net.SendAnswerMakeGuildPacket(guildName)
- self.guildNameBoard.Close()
- self.guildNameBoard = None
- return TRUE
- def CancelGuildName(self):
- self.guildNameBoard.Close()
- self.guildNameBoard = None
- return TRUE
- ## Refine
- def PopupMessage(self, msg):
- self.stream.popupWindow.Close()
- self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK)
- def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type=0):
- self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type)
- def AppendMaterialToRefineDialog(self, vnum, count):
- self.interface.AppendMaterialToRefineDialog(vnum, count)
- def RunUseSkillEvent(self, slotIndex, coolTime):
- self.interface.OnUseSkill(slotIndex, coolTime)
- def ClearAffects(self):
- self.affectShower.ClearAffects()
- def SetAffect(self, affect):
- self.affectShower.SetAffect(affect)
- def ResetAffect(self, affect):
- self.affectShower.ResetAffect(affect)
- # UNKNOWN_UPDATE
- def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
- self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration)
- if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
- self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1)
- elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type:
- self.BINARY_DragonSoulGiveQuilification()
- def BINARY_NEW_RemoveAffect(self, type, pointIdx):
- self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx)
- if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
- self.interface.DragonSoulDeactivate()
- # END_OF_UNKNOWN_UPDATE
- def ActivateSkillSlot(self, slotIndex):
- if self.interface:
- self.interface.OnActivateSkill(slotIndex)
- def DeactivateSkillSlot(self, slotIndex):
- if self.interface:
- self.interface.OnDeactivateSkill(slotIndex)
- def RefreshEquipment(self):
- if self.interface:
- self.interface.RefreshInventory()
- def RefreshInventory(self):
- if self.interface:
- self.interface.RefreshInventory()
- def RefreshCharacter(self):
- if self.interface:
- self.interface.RefreshCharacter()
- def OnGameOver(self):
- self.CloseTargetBoard()
- self.OpenRestartDialog()
- def OpenRestartDialog(self):
- self.interface.OpenRestartDialog()
- def ChangeCurrentSkill(self, skillSlotNumber):
- self.interface.OnChangeCurrentSkill(skillSlotNumber)
- ## TargetBoard
- def SetPCTargetBoard(self, vid, name):
- self.targetBoard.Open(vid, name)
- if app.IsPressed(app.DIK_LCONTROL):
- if not player.IsSameEmpire(vid):
- return
- if player.IsMainCharacterIndex(vid):
- return
- elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid):
- return
- self.interface.OpenWhisperDialog(name)
- def RefreshTargetBoardByVID(self, vid):
- self.targetBoard.RefreshByVID(vid)
- def RefreshTargetBoardByName(self, name):
- self.targetBoard.RefreshByName(name)
- def __RefreshTargetBoard(self):
- self.targetBoard.Refresh()
- def SetHPTargetBoard(self, vid, hpPercentage):
- if vid != self.targetBoard.GetTargetVID():
- self.targetBoard.ResetTargetBoard()
- self.targetBoard.SetEnemyVID(vid)
- self.targetBoard.SetHP(hpPercentage)
- self.targetBoard.Show()
- def CloseTargetBoardIfDifferent(self, vid):
- if vid != self.targetBoard.GetTargetVID():
- self.targetBoard.Close()
- def CloseTargetBoard(self):
- self.targetBoard.Close()
- ## View Equipment
- def OpenEquipmentDialog(self, vid):
- self.interface.OpenEquipmentDialog(vid)
- def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count):
- self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count)
- def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value):
- self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value)
- def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value):
- self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value)
- # SHOW_LOCAL_MAP_NAME
- def ShowMapName(self, mapName, x, y):
- if self.mapNameShower:
- self.mapNameShower.ShowMapName(mapName, x, y)
- if self.interface:
- self.interface.SetMapName(mapName)
- # END_OF_SHOW_LOCAL_MAP_NAME
- def BINARY_OpenAtlasWindow(self):
- self.interface.BINARY_OpenAtlasWindow()
- ## Chat
- def OnRecvWhisper(self, mode, name, line):
- if mode == chat.WHISPER_TYPE_GM:
- self.interface.RegisterGameMasterName(name)
- chat.AppendWhisper(mode, name, line)
- self.interface.RecvWhisper(name)
- def OnRecvWhisperSystemMessage(self, mode, name, line):
- chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line)
- self.interface.RecvWhisper(name)
- def OnRecvWhisperError(self, mode, name, line):
- if localeInfo.WHISPER_ERROR.has_key(mode):
- chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name))
- else:
- chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name))
- self.interface.RecvWhisper(name)
- def RecvWhisper(self, name):
- self.interface.RecvWhisper(name)
- def OnPickMoney(self, money):
- if constInfo.pickInfo == 1:
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_PICK_MONEY % (money))
- else:
- return
- def OnShopError(self, type):
- try:
- self.PopupMessage(localeInfo.SHOP_ERROR_DICT[type])
- except KeyError:
- self.PopupMessage(localeInfo.SHOP_ERROR_UNKNOWN % (type))
- def OnSafeBoxError(self):
- self.PopupMessage(localeInfo.SAFEBOX_ERROR)
- def OnFishingSuccess(self, isFish, fishName):
- chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_SUCCESS(isFish, fishName), 2000)
- # ADD_FISHING_MESSAGE
- def OnFishingNotifyUnknown(self):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_UNKNOWN)
- def OnFishingWrongPlace(self):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_WRONG_PLACE)
- # END_OF_ADD_FISHING_MESSAGE
- def OnFishingNotify(self, isFish, fishName):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_NOTIFY(isFish, fishName))
- def OnFishingFailure(self):
- chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_FAILURE, 2000)
- def OnCannotPickItem(self):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_PICK_ITEM)
- # MINING
- def OnCannotMining(self):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_MINING)
- # END_OF_MINING
- def OnCannotUseSkill(self, vid, type):
- if localeInfo.USE_SKILL_ERROR_TAIL_DICT.has_key(type):
- textTail.RegisterInfoTail(vid, localeInfo.USE_SKILL_ERROR_TAIL_DICT[type])
- if localeInfo.USE_SKILL_ERROR_CHAT_DICT.has_key(type):
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_SKILL_ERROR_CHAT_DICT[type])
- def OnCannotShotError(self, vid, type):
- textTail.RegisterInfoTail(vid, localeInfo.SHOT_ERROR_TAIL_DICT.get(type, localeInfo.SHOT_ERROR_UNKNOWN % (type)))
- ## PointReset
- def StartPointReset(self):
- self.interface.OpenPointResetDialog()
- ## Shop
- def StartShop(self, vid):
- self.interface.OpenShopDialog(vid)
- def EndShop(self):
- self.interface.CloseShopDialog()
- def RefreshShop(self):
- self.interface.RefreshShopDialog()
- def SetShopSellingPrice(self, Price):
- pass
- ## Exchange
- def StartExchange(self):
- self.interface.StartExchange()
- def EndExchange(self):
- self.interface.EndExchange()
- def RefreshExchange(self):
- self.interface.RefreshExchange()
- ## Party
- def RecvPartyInviteQuestion(self, leaderVID, leaderName):
- partyInviteQuestionDialog = uiCommon.QuestionDialog()
- partyInviteQuestionDialog.SetText(leaderName + localeInfo.PARTY_DO_YOU_JOIN)
- partyInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerPartyInvite(arg))
- partyInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerPartyInvite(arg))
- partyInviteQuestionDialog.Open()
- partyInviteQuestionDialog.partyLeaderVID = leaderVID
- self.partyInviteQuestionDialog = partyInviteQuestionDialog
- def AnswerPartyInvite(self, answer):
- if not self.partyInviteQuestionDialog:
- return
- partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID
- distance = player.GetCharacterDistance(partyLeaderVID)
- if distance < 0.0 or distance > 5000:
- answer = FALSE
- net.SendPartyInviteAnswerPacket(partyLeaderVID, answer)
- self.partyInviteQuestionDialog.Close()
- self.partyInviteQuestionDialog = None
- def AddPartyMember(self, pid, name):
- self.interface.AddPartyMember(pid, name)
- def UpdatePartyMemberInfo(self, pid):
- self.interface.UpdatePartyMemberInfo(pid)
- def RemovePartyMember(self, pid):
- self.interface.RemovePartyMember(pid)
- self.__RefreshTargetBoard()
- def LinkPartyMember(self, pid, vid):
- self.interface.LinkPartyMember(pid, vid)
- def UnlinkPartyMember(self, pid):
- self.interface.UnlinkPartyMember(pid)
- def UnlinkAllPartyMember(self):
- self.interface.UnlinkAllPartyMember()
- def ExitParty(self):
- self.interface.ExitParty()
- self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID())
- def ChangePartyParameter(self, distributionMode):
- self.interface.ChangePartyParameter(distributionMode)
- ## Messenger
- def OnMessengerAddFriendQuestion(self, name):
- messengerAddFriendQuestion = uiCommon.QuestionDialog2()
- messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name))
- messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
- messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
- messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
- messengerAddFriendQuestion.Open()
- messengerAddFriendQuestion.name = name
- self.messengerAddFriendQuestion = messengerAddFriendQuestion
- def OnAcceptAddFriend(self):
- name = self.messengerAddFriendQuestion.name
- net.SendChatPacket("/messenger_auth y " + name)
- self.OnCloseAddFriendQuestionDialog()
- return TRUE
- def OnDenyAddFriend(self):
- name = self.messengerAddFriendQuestion.name
- net.SendChatPacket("/messenger_auth n " + name)
- self.OnCloseAddFriendQuestionDialog()
- return TRUE
- def OnCloseAddFriendQuestionDialog(self):
- self.messengerAddFriendQuestion.Close()
- self.messengerAddFriendQuestion = None
- return TRUE
- ## SafeBox
- def OpenSafeboxWindow(self, size):
- self.interface.OpenSafeboxWindow(size)
- def RefreshSafebox(self):
- self.interface.RefreshSafebox()
- def RefreshSafeboxMoney(self):
- self.interface.RefreshSafeboxMoney()
- # ITEM_MALL
- def OpenMallWindow(self, size):
- self.interface.OpenMallWindow(size)
- def RefreshMall(self):
- self.interface.RefreshMall()
- # END_OF_ITEM_MALL
- ## Guild
- def RecvGuildInviteQuestion(self, guildID, guildName):
- guildInviteQuestionDialog = uiCommon.QuestionDialog()
- guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN)
- guildInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerGuildInvite(arg))
- guildInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerGuildInvite(arg))
- guildInviteQuestionDialog.Open()
- guildInviteQuestionDialog.guildID = guildID
- self.guildInviteQuestionDialog = guildInviteQuestionDialog
- def AnswerGuildInvite(self, answer):
- if not self.guildInviteQuestionDialog:
- return
- guildLeaderVID = self.guildInviteQuestionDialog.guildID
- net.SendGuildInviteAnswerPacket(guildLeaderVID, answer)
- self.guildInviteQuestionDialog.Close()
- self.guildInviteQuestionDialog = None
- def DeleteGuild(self):
- self.interface.DeleteGuild()
- ## Clock
- def ShowClock(self, second):
- self.interface.ShowClock(second)
- def HideClock(self):
- self.interface.HideClock()
- ## Emotion
- def BINARY_ActEmotion(self, emotionIndex):
- if self.interface.wndCharacter:
- self.interface.wndCharacter.ActEmotion(emotionIndex)
- ###############################################################################################
- ###############################################################################################
- ## Keyboard Functions
- def CheckFocus(self):
- if FALSE == self.IsFocus():
- if TRUE == self.interface.IsOpenChat():
- self.interface.ToggleChat()
- self.SetFocus()
- def SaveScreen(self):
- print "save screen"
- # SCREENSHOT_CWDSAVE
- if SCREENSHOT_CWDSAVE:
- if not os.path.exists(os.getcwd()+os.sep+"screenshot"):
- os.mkdir(os.getcwd()+os.sep+"screenshot")
- (succeeded, name) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep)
- elif SCREENSHOT_DIR:
- (succeeded, name) = grp.SaveScreenShot(SCREENSHOT_DIR)
- else:
- (succeeded, name) = grp.SaveScreenShot()
- # END_OF_SCREENSHOT_CWDSAVE
- if succeeded:
- pass
- """
- chat.AppendChat(chat.CHAT_TYPE_INFO, name + localeInfo.SCREENSHOT_SAVE1)
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE2)
- """
- else:
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE_FAILURE)
- def ShowConsole(self):
- if debugInfo.IsDebugMode() or TRUE == self.consoleEnable:
- player.EndKeyWalkingImmediately()
- self.console.OpenWindow()
- def ShowName(self):
- self.ShowNameFlag = TRUE
- self.playerGauge.EnableShowAlways()
- player.SetQuickPage(self.quickSlotPageIndex+1)
- # ADD_ALWAYS_SHOW_NAME
- def __IsShowName(self):
- if systemSetting.IsAlwaysShowName():
- return TRUE
- if self.ShowNameFlag:
- return TRUE
- return FALSE
- # END_OF_ADD_ALWAYS_SHOW_NAME
- def HideName(self):
- self.ShowNameFlag = FALSE
- self.playerGauge.DisableShowAlways()
- player.SetQuickPage(self.quickSlotPageIndex)
- def ShowMouseImage(self):
- self.interface.ShowMouseImage()
- def HideMouseImage(self):
- self.interface.HideMouseImage()
- def StartAttack(self):
- player.SetAttackKeyState(TRUE)
- def EndAttack(self):
- player.SetAttackKeyState(FALSE)
- def MoveUp(self):
- player.SetSingleDIKKeyState(app.DIK_UP, TRUE)
- def MoveDown(self):
- player.SetSingleDIKKeyState(app.DIK_DOWN, TRUE)
- def MoveLeft(self):
- player.SetSingleDIKKeyState(app.DIK_LEFT, TRUE)
- def MoveRight(self):
- player.SetSingleDIKKeyState(app.DIK_RIGHT, TRUE)
- def StopUp(self):
- player.SetSingleDIKKeyState(app.DIK_UP, FALSE)
- def StopDown(self):
- player.SetSingleDIKKeyState(app.DIK_DOWN, FALSE)
- def StopLeft(self):
- player.SetSingleDIKKeyState(app.DIK_LEFT, FALSE)
- def StopRight(self):
- player.SetSingleDIKKeyState(app.DIK_RIGHT, FALSE)
- def PickUpItem(self):
- player.PickCloseItem()
- ###############################################################################################
- ###############################################################################################
- ## Event Handler
- def OnKeyDown(self, key):
- if self.interface.wndWeb and self.interface.wndWeb.IsShow():
- return
- if key == app.DIK_ESC:
- self.RequestDropItem(FALSE)
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- try:
- self.onPressKeyDict[key]()
- except KeyError:
- pass
- except:
- raise
- return TRUE
- def OnKeyUp(self, key):
- try:
- self.onClickKeyDict[key]()
- except KeyError:
- pass
- except:
- raise
- return TRUE
- def OnMouseLeftButtonDown(self):
- if self.interface.BUILD_OnMouseLeftButtonDown():
- return
- if mouseModule.mouseController.isAttached():
- self.CheckFocus()
- else:
- hyperlink = ui.GetHyperlink()
- if hyperlink:
- return
- else:
- self.CheckFocus()
- player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS);
- return TRUE
- def OnMouseLeftButtonUp(self):
- if self.interface.BUILD_OnMouseLeftButtonUp():
- return
- if mouseModule.mouseController.isAttached():
- attachedType = mouseModule.mouseController.GetAttachedType()
- attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
- attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
- attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
- ## QuickSlot
- if player.SLOT_TYPE_QUICK_SLOT == attachedType:
- player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos)
- ## Inventory
- elif player.SLOT_TYPE_INVENTORY == attachedType:
- if player.ITEM_MONEY == attachedItemIndex:
- self.__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex)
- else:
- self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
- ## DragonSoul
- elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
- self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
- ## Spezial_Sortage
- if app.ENABLE_SPECIAL_STORAGE:
- if player.SLOT_TYPE_UPGRADE_INVENTORY == attachedType or\
- player.SLOT_TYPE_BOOK_INVENTORY == attachedType or\
- player.SLOT_TYPE_STONE_INVENTORY == attachedType:
- self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
- mouseModule.mouseController.DeattachObject()
- else:
- hyperlink = ui.GetHyperlink()
- if hyperlink:
- if app.IsPressed(app.DIK_LALT):
- link = chat.GetLinkFromHyperlink(hyperlink)
- ime.PasteString(link)
- else:
- self.interface.MakeHyperlinkTooltip(hyperlink)
- return
- else:
- player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)
- #player.EndMouseWalking()
- return TRUE
- def __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID):
- if app.ENABLE_SPECIAL_STORAGE:
- if player.SLOT_TYPE_INVENTORY == attachedType or\
- player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType or\
- player.SLOT_TYPE_UPGRADE_INVENTORY == attachedType or\
- player.SLOT_TYPE_BOOK_INVENTORY == attachedType or\
- player.SLOT_TYPE_STONE_INVENTORY == attachedType:
- attachedInvenType = player.SlotTypeToInvenType(attachedType)
- if True == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID:
- if player.IsEquipmentSlot(attachedItemSlotPos) and\
- player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType and\
- player.SLOT_TYPE_UPGRADE_INVENTORY != attachedType and\
- player.SLOT_TYPE_BOOK_INVENTORY != attachedType and\
- player.SLOT_TYPE_STONE_INVENTORY != attachedType:
- self.stream.popupWindow.Close()
- self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK)
- else:
- if chr.IsNPC(dstChrID):
- net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount)
- else:
- net.SendExchangeStartPacket(dstChrID)
- net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0)
- else:
- self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount)
- else:
- if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
- attachedInvenType = player.SlotTypeToInvenType(attachedType)
- if TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID:
- if player.IsEquipmentSlot(attachedItemSlotPos) and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType:
- self.stream.popupWindow.Close()
- self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK)
- else:
- if chr.IsNPC(dstChrID):
- net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount)
- else:
- net.SendExchangeStartPacket(dstChrID)
- net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0)
- else:
- self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount)
- def __PutMoney(self, attachedType, attachedMoney, dstChrID):
- if TRUE == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID:
- net.SendExchangeStartPacket(dstChrID)
- net.SendExchangeElkAddPacket(attachedMoney)
- else:
- self.__DropMoney(attachedType, attachedMoney)
- def __DropMoney(self, attachedType, attachedMoney):
- # PRIVATESHOP_DISABLE_ITEM_DROP - °³ÀλóÁ¡ ¿°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ ¹ö¸² ¹æÁö
- if uiPrivateShopBuilder.IsBuildingPrivateShop():
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
- return
- # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
- if attachedMoney>=1000:
- self.stream.popupWindow.Close()
- self.stream.popupWindow.Open(localeInfo.DROP_MONEY_FAILURE_1000_OVER, 0, localeInfo.UI_OK)
- return
- itemDropQuestionDialog = uiCommon.QuestionDialog()
- itemDropQuestionDialog.SetText(localeInfo.DO_YOU_DROP_MONEY % (attachedMoney))
- itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
- itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
- itemDropQuestionDialog.Open()
- itemDropQuestionDialog.dropType = attachedType
- itemDropQuestionDialog.dropCount = attachedMoney
- itemDropQuestionDialog.dropNumber = player.ITEM_MONEY
- self.itemDropQuestionDialog = itemDropQuestionDialog
- def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
- # PRIVATESHOP_DISABLE_ITEM_DROP - °³ÀλóÁ¡ ¿°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ ¹ö¸² ¹æÁö
- if uiPrivateShopBuilder.IsBuildingPrivateShop():
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
- return
- # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
- if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos):
- self.stream.popupWindow.Close()
- self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK)
- else:
- if player.SLOT_TYPE_INVENTORY == attachedType:
- dropItemIndex = player.GetItemIndex(attachedItemSlotPos)
- item.SelectItem(dropItemIndex)
- dropItemName = item.GetItemName()
- ## Question Text
- questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)
- ## Dialog
- itemDropQuestionDialog = uiCommon.QuestionDialog()
- itemDropQuestionDialog.SetText(questionText)
- itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
- itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
- itemDropQuestionDialog.Open()
- itemDropQuestionDialog.dropType = attachedType
- itemDropQuestionDialog.dropNumber = attachedItemSlotPos
- itemDropQuestionDialog.dropCount = attachedItemCount
- self.itemDropQuestionDialog = itemDropQuestionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
- dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos)
- item.SelectItem(dropItemIndex)
- dropItemName = item.GetItemName()
- ## Question Text
- questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)
- ## Dialog
- itemDropQuestionDialog = uiCommon.QuestionDialog()
- itemDropQuestionDialog.SetText(questionText)
- itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
- itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
- itemDropQuestionDialog.Open()
- itemDropQuestionDialog.dropType = attachedType
- itemDropQuestionDialog.dropNumber = attachedItemSlotPos
- itemDropQuestionDialog.dropCount = attachedItemCount
- self.itemDropQuestionDialog = itemDropQuestionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- if app.ENABLE_SPECIAL_STORAGE:
- if player.SLOT_TYPE_UPGRADE_INVENTORY == attachedType or\
- player.SLOT_TYPE_BOOK_INVENTORY == attachedType or\
- player.SLOT_TYPE_STONE_INVENTORY == attachedType:
- dropItemIndex = player.GetItemIndex(player.SlotTypeToInvenType(attachedType), attachedItemSlotPos)
- item.SelectItem(dropItemIndex)
- dropItemName = item.GetItemName()
- ## Question Text
- questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)
- ## Dialog
- itemDropQuestionDialog = uiCommon.QuestionDialog()
- itemDropQuestionDialog.SetText(questionText)
- itemDropQuestionDialog.SetAcceptEvent(lambda arg=True: self.RequestDropItem(arg))
- itemDropQuestionDialog.SetCancelEvent(lambda arg=False: self.RequestDropItem(arg))
- itemDropQuestionDialog.Open()
- itemDropQuestionDialog.dropType = attachedType
- itemDropQuestionDialog.dropNumber = attachedItemSlotPos
- itemDropQuestionDialog.dropCount = attachedItemCount
- self.itemDropQuestionDialog = itemDropQuestionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- def RequestDropItem(self, answer):
- if not self.itemDropQuestionDialog:
- return
- if answer:
- dropType = self.itemDropQuestionDialog.dropType
- dropCount = self.itemDropQuestionDialog.dropCount
- dropNumber = self.itemDropQuestionDialog.dropNumber
- if player.SLOT_TYPE_INVENTORY == dropType:
- if dropNumber == player.ITEM_MONEY:
- net.SendGoldDropPacketNew(dropCount)
- snd.PlaySound("sound/ui/money.wav")
- else:
- # PRIVATESHOP_DISABLE_ITEM_DROP
- self.__SendDropItemPacket(dropNumber, dropCount)
- # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
- elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType:
- # PRIVATESHOP_DISABLE_ITEM_DROP
- self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY)
- # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
- if app.ENABLE_SPECIAL_STORAGE:
- if player.SLOT_TYPE_UPGRADE_INVENTORY == dropType or\
- player.SLOT_TYPE_BOOK_INVENTORY == dropType or\
- player.SLOT_TYPE_STONE_INVENTORY == dropType:
- self.__SendDropItemPacket(dropNumber, dropCount, player.SlotTypeToInvenType(dropType))
- self.itemDropQuestionDialog.Close()
- self.itemDropQuestionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- # PRIVATESHOP_DISABLE_ITEM_DROP
- def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY):
- if uiPrivateShopBuilder.IsBuildingPrivateShop():
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
- return
- net.SendItemDropPacketNew(itemInvenType, itemVNum, itemCount)
- # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
- def OnMouseRightButtonDown(self):
- self.CheckFocus()
- if TRUE == mouseModule.mouseController.isAttached():
- mouseModule.mouseController.DeattachObject()
- else:
- player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS)
- return TRUE
- def OnMouseRightButtonUp(self):
- if TRUE == mouseModule.mouseController.isAttached():
- return TRUE
- player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK)
- return TRUE
- def OnMouseMiddleButtonDown(self):
- player.SetMouseMiddleButtonState(player.MBS_PRESS)
- def OnMouseMiddleButtonUp(self):
- player.SetMouseMiddleButtonState(player.MBS_CLICK)
- def OnUpdate(self):
- self.Day_Night_System()
- app.UpdateGame()
- if self.switchbot.bot_shown == 0:
- self.switchbot.OnUpdate()
- if self.mapNameShower.IsShow():
- self.mapNameShower.Update()
- if self.isShowDebugInfo:
- self.UpdateDebugInfo()
- if self.enableXMasBoom:
- self.__XMasBoom_Update()
- self.interface.BUILD_OnUpdate()
- def UpdateDebugInfo(self):
- #
- # ij¸¯ÅÍ ÁÂÇ¥ ¹× FPS Ãâ·Â
- (x, y, z) = player.GetMainCharacterPosition()
- nUpdateTime = app.GetUpdateTime()
- nUpdateFPS = app.GetUpdateFPS()
- nRenderFPS = app.GetRenderFPS()
- nFaceCount = app.GetFaceCount()
- fFaceSpeed = app.GetFaceSpeed()
- nST=background.GetRenderShadowTime()
- (fAveRT, nCurRT) = app.GetRenderTime()
- (iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo()
- (iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum()
- if iPatch == 0:
- iPatch = 1
- #(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum()
- self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (x, y, z, app.GetAvailableTextureMemory()/(1024*1024)))
- xMouse, yMouse = wndMgr.GetMousePosition()
- self.PrintMousePos.SetText("MousePosition: %d %d" % (xMouse, yMouse))
- self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPS, nUpdateTime, fFaceSpeed))
- if fAveRT>1.0:
- self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT))
- self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio))
- #self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch())
- #self.TextureNum.SetText("TN : %s" % (sTextureNum))
- #self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC))
- self.ViewDistance.SetText("Num : %d, FS : %f, FE : %f, FC : %f" % (iNum, fFogStart, fFogEnd, fFarCilp))
- def OnRender(self):
- app.RenderGame()
- if self.console.Console.collision:
- background.RenderCollision()
- chr.RenderCollision()
- (x, y) = app.GetCursorPosition()
- ########################
- # Picking
- ########################
- textTail.UpdateAllTextTail()
- if TRUE == wndMgr.IsPickedWindow(self.hWnd):
- self.PickingCharacterIndex = chr.Pick()
- if -1 != self.PickingCharacterIndex:
- textTail.ShowCharacterTextTail(self.PickingCharacterIndex)
- if 0 != self.targetBoard.GetTargetVID():
- textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID())
- # ADD_ALWAYS_SHOW_NAME
- if not self.__IsShowName():
- self.PickingItemIndex = item.Pick()
- if -1 != self.PickingItemIndex:
- textTail.ShowItemTextTail(self.PickingItemIndex)
- # END_OF_ADD_ALWAYS_SHOW_NAME
- ## Show all name in the range
- # ADD_ALWAYS_SHOW_NAME
- if self.__IsShowName():
- textTail.ShowAllTextTail()
- self.PickingItemIndex = textTail.Pick(x, y)
- # END_OF_ADD_ALWAYS_SHOW_NAME
- textTail.UpdateShowingTextTail()
- textTail.ArrangeTextTail()
- if -1 != self.PickingItemIndex:
- textTail.SelectItemName(self.PickingItemIndex)
- grp.PopState()
- grp.SetInterfaceRenderState()
- textTail.Render()
- textTail.HideAllTextTail()
- def OnPressEscapeKey(self):
- if app.TARGET == app.GetCursor():
- app.SetCursor(app.NORMAL)
- elif TRUE == mouseModule.mouseController.isAttached():
- mouseModule.mouseController.DeattachObject()
- else:
- self.interface.OpenSystemDialog()
- return TRUE
- def OnIMEReturn(self):
- if app.IsPressed(app.DIK_LSHIFT):
- self.interface.OpenWhisperDialogWithoutTarget()
- else:
- self.interface.ToggleChat()
- return TRUE
- def OnPressExitKey(self):
- self.interface.ToggleSystemDialog()
- return TRUE
- ## BINARY CALLBACK
- ######################################################################################
- # WEDDING
- def BINARY_LoverInfo(self, name, lovePoint):
- if self.interface.wndMessenger:
- self.interface.wndMessenger.OnAddLover(name, lovePoint)
- if self.affectShower:
- self.affectShower.SetLoverInfo(name, lovePoint)
- def BINARY_UpdateLovePoint(self, lovePoint):
- if self.interface.wndMessenger:
- self.interface.wndMessenger.OnUpdateLovePoint(lovePoint)
- if self.affectShower:
- self.affectShower.OnUpdateLovePoint(lovePoint)
- # END_OF_WEDDING
- #TARGET_INFO_SYSTEM
- if app.ENABLE_SEND_TARGET_INFO:
- def BINARY_AddTargetMonsterDropInfo(self, raceNum, itemVnum, itemCount):
- if not raceNum in constInfo.MONSTER_INFO_DATA:
- constInfo.MONSTER_INFO_DATA.update({raceNum : {}})
- constInfo.MONSTER_INFO_DATA[raceNum].update({"items" : []})
- curList = constInfo.MONSTER_INFO_DATA[raceNum]["items"]
- isUpgradeable = False
- isMetin = False
- item.SelectItem(itemVnum)
- if item.GetItemType() == item.ITEM_TYPE_WEAPON or item.GetItemType() == item.ITEM_TYPE_ARMOR:
- isUpgradeable = True
- elif item.GetItemType() == item.ITEM_TYPE_METIN:
- isMetin = True
- for curItem in curList:
- if isUpgradeable:
- if curItem.has_key("vnum_list") and curItem["vnum_list"][0] / 10 * 10 == itemVnum / 10 * 10:
- if not (itemVnum in curItem["vnum_list"]):
- curItem["vnum_list"].append(itemVnum)
- return
- elif isMetin:
- if curItem.has_key("vnum_list"):
- baseVnum = curItem["vnum_list"][0]
- if curItem.has_key("vnum_list") and (baseVnum - baseVnum%1000) == (itemVnum - itemVnum%1000):
- if not (itemVnum in curItem["vnum_list"]):
- curItem["vnum_list"].append(itemVnum)
- return
- else:
- if curItem.has_key("vnum") and curItem["vnum"] == itemVnum and curItem["count"] == itemCount:
- return
- if isUpgradeable or isMetin:
- curList.append({"vnum_list":[itemVnum], "count":itemCount})
- else:
- curList.append({"vnum":itemVnum, "count":itemCount})
- def BINARY_RefreshTargetMonsterDropInfo(self, raceNum):
- self.targetBoard.RefreshMonsterInfoBoard()
- # QUEST_CONFIRM
- def BINARY_OnQuestConfirm(self, msg, timeout, pid):
- confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
- confirmDialog.Open(msg, timeout)
- confirmDialog.SetAcceptEvent(lambda answer=TRUE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
- confirmDialog.SetCancelEvent(lambda answer=FALSE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
- self.confirmDialog = confirmDialog
- # END_OF_QUEST_CONFIRM
- # GIFT command
- def Gift_Show(self):
- self.interface.ShowGift()
- # CUBE
- def BINARY_Cube_Open(self, npcVNUM):
- self.currentCubeNPC = npcVNUM
- self.interface.OpenCubeWindow()
- if npcVNUM not in self.cubeInformation:
- net.SendChatPacket("/cube r_info")
- else:
- cubeInfoList = self.cubeInformation[npcVNUM]
- i = 0
- for cubeInfo in cubeInfoList:
- self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])
- j = 0
- for materialList in cubeInfo["materialList"]:
- for materialInfo in materialList:
- itemVnum, itemCount = materialInfo
- self.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)
- j = j + 1
- i = i + 1
- self.interface.wndCube.Refresh()
- def BINARY_Cube_Close(self):
- self.interface.CloseCubeWindow()
- # Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ update
- def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
- self.interface.UpdateCubeInfo(gold, itemVnum, count)
- def BINARY_Cube_Succeed(self, itemVnum, count):
- print "Å¥ºê Á¦ÀÛ ¼º°ø"
- self.interface.SucceedCubeWork(itemVnum, count)
- pass
- def BINARY_Cube_Failed(self):
- print "Å¥ºê Á¦ÀÛ ½ÇÆÐ"
- self.interface.FailedCubeWork()
- pass
- def BINARY_Cube_ResultList(self, npcVNUM, listText):
- # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºÐµÈ ¸®½ºÆ®¸¦ ÁÜ
- #print listText
- if npcVNUM == 0:
- npcVNUM = self.currentCubeNPC
- self.cubeInformation[npcVNUM] = []
- try:
- for eachInfoText in listText.split("/"):
- eachInfo = eachInfoText.split(",")
- itemVnum = int(eachInfo[0])
- itemCount = int(eachInfo[1])
- self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})
- self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)
- resultCount = len(self.cubeInformation[npcVNUM])
- requestCount = 7
- modCount = resultCount % requestCount
- splitCount = resultCount / requestCount
- for i in xrange(splitCount):
- #print("/cube r_info %d %d" % (i * requestCount, requestCount))
- net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))
- if 0 < modCount:
- #print("/cube r_info %d %d" % (splitCount * requestCount, modCount))
- net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))
- except RuntimeError, msg:
- dbg.TraceError(msg)
- return 0
- pass
- def BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):
- # Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000
- try:
- #print listText
- if 3 > len(listText):
- dbg.TraceError("Wrong Cube Material Infomation")
- return 0
- eachResultList = listText.split("@")
- cubeInfo = self.cubeInformation[self.currentCubeNPC]
- itemIndex = 0
- for eachResultText in eachResultList:
- cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]
- materialList = cubeInfo[startIndex + itemIndex]["materialList"]
- gold = 0
- splitResult = eachResultText.split("/")
- if 1 < len(splitResult):
- gold = int(splitResult[1])
- #print "splitResult : ", splitResult
- eachMaterialList = splitResult[0].split("&")
- i = 0
- for eachMaterialText in eachMaterialList:
- complicatedList = eachMaterialText.split("|")
- if 0 < len(complicatedList):
- for complicatedText in complicatedList:
- (itemVnum, itemCount) = complicatedText.split(",")
- itemVnum = int(itemVnum)
- itemCount = int(itemCount)
- self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)
- materialList[i].append((itemVnum, itemCount))
- else:
- itemVnum, itemCount = eachMaterialText.split(",")
- itemVnum = int(itemVnum)
- itemCount = int(itemCount)
- self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)
- materialList[i].append((itemVnum, itemCount))
- i = i + 1
- itemIndex = itemIndex + 1
- self.interface.wndCube.Refresh()
- except RuntimeError, msg:
- dbg.TraceError(msg)
- return 0
- pass
- # END_OF_CUBE
- # ¿ëÈ¥¼®
- def BINARY_Highlight_Item(self, inven_type, inven_pos):
- self.interface.Highligt_Item(inven_type, inven_pos)
- def BINARY_DragonSoulGiveQuilification(self):
- self.interface.DragonSoulGiveQuilification()
- def BINARY_DragonSoulRefineWindow_Open(self):
- self.interface.OpenDragonSoulRefineWindow()
- def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):
- self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)
- def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):
- self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)
- # END of DRAGON SOUL REFINE WINDOW
- def BINARY_SetBigMessage(self, message):
- self.interface.bigBoard.SetTip(message)
- def BINARY_SetTipMessage(self, message):
- self.interface.tipBoard.SetTip(message)
- def BINARY_AppendNotifyMessage(self, type):
- if not type in localeInfo.NOTIFY_MESSAGE:
- return
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.NOTIFY_MESSAGE[type])
- def BINARY_Guild_EnterGuildArea(self, areaID):
- self.interface.BULID_EnterGuildArea(areaID)
- def BINARY_Guild_ExitGuildArea(self, areaID):
- self.interface.BULID_ExitGuildArea(areaID)
- def BINARY_GuildWar_OnSendDeclare(self, guildID):
- pass
- def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType):
- mainCharacterName = player.GetMainCharacterName()
- masterName = guild.GetGuildMasterName()
- if mainCharacterName == masterName:
- self.__GuildWar_OpenAskDialog(guildID, warType)
- def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point):
- self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point)
- def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp):
- self.interface.OnStartGuildWar(guildSelf, guildOpp)
- def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp):
- self.interface.OnEndGuildWar(guildSelf, guildOpp)
- def BINARY_BettingGuildWar_SetObserverMode(self, isEnable):
- self.interface.BINARY_SetObserverMode(isEnable)
- def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount):
- self.interface.wndMiniMap.UpdateObserverCount(observerCount)
- def __GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount):
- guildID1 = int(guildID1)
- guildID2 = int(guildID2)
- memberCount1 = int(memberCount1)
- memberCount2 = int(memberCount2)
- observerCount = int(observerCount)
- self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2)
- self.interface.wndMiniMap.UpdateObserverCount(observerCount)
- def __GuildWar_OpenAskDialog(self, guildID, warType):
- guildName = guild.GetGuildName(guildID)
- # REMOVED_GUILD_BUG_FIX
- if "Noname" == guildName:
- return
- # END_OF_REMOVED_GUILD_BUG_FIX
- import uiGuild
- questionDialog = uiGuild.AcceptGuildWarDialog()
- questionDialog.SAFE_SetAcceptEvent(self.__GuildWar_OnAccept)
- questionDialog.SAFE_SetCancelEvent(self.__GuildWar_OnDecline)
- questionDialog.Open(guildName, warType)
- self.guildWarQuestionDialog = questionDialog
- def __GuildWar_CloseAskDialog(self):
- self.guildWarQuestionDialog.Close()
- self.guildWarQuestionDialog = None
- def __GuildWar_OnAccept(self):
- guildName = self.guildWarQuestionDialog.GetGuildName()
- net.SendChatPacket("/war " + guildName)
- self.__GuildWar_CloseAskDialog()
- return 1
- def __GuildWar_OnDecline(self):
- guildName = self.guildWarQuestionDialog.GetGuildName()
- net.SendChatPacket("/nowar " + guildName)
- self.__GuildWar_CloseAskDialog()
- return 1
- ## BINARY CALLBACK
- ######################################################################################
- def __ServerCommand_Build(self):
- serverCommandList={
- "ConsoleEnable" : self.__Console_Enable,
- "DayMode" : self.__DayMode_Update,
- "PRESERVE_DayMode" : self.__PRESERVE_DayMode_Update,
- "CloseRestartWindow" : self.__RestartDialog_Close,
- "OpenPrivateShop" : self.__PrivateShop_Open,
- "PartyHealReady" : self.PartyHealReady,
- "ShowMeSafeboxPassword" : self.AskSafeboxPassword,
- "CloseSafebox" : self.CommandCloseSafebox,
- "getinputbegin" : self.__Inputget1,
- "getinputend" : self.__Inputget2,
- "getinput" : self.__Inputget3,
- # ITEM_MALL
- "CloseMall" : self.CommandCloseMall,
- "ShowMeMallPassword" : self.AskMallPassword,
- "item_mall" : self.__ItemMall_Open,
- # END_OF_ITEM_MALL
- "RefineSuceeded" : self.RefineSuceededMessage,
- "RefineFailed" : self.RefineFailedMessage,
- "xmas_snow" : self.__XMasSnow_Enable,
- "xmas_boom" : self.__XMasBoom_Enable,
- "xmas_song" : self.__XMasSong_Enable,
- "xmas_tree" : self.__XMasTree_Enable,
- "newyear_boom" : self.__XMasBoom_Enable,
- "PartyRequest" : self.__PartyRequestQuestion,
- "PartyRequestDenied" : self.__PartyRequestDenied,
- "horse_state" : self.__Horse_UpdateState,
- "hide_horse_state" : self.__Horse_HideState,
- "WarUC" : self.__GuildWar_UpdateMemberCount,
- "test_server" : self.__EnableTestServerFlag,
- "mall" : self.__InGameShop_Show,
- # WEDDING
- "lover_login" : self.__LoginLover,
- "lover_logout" : self.__LogoutLover,
- "lover_near" : self.__LoverNear,
- "lover_far" : self.__LoverFar,
- "lover_divorce" : self.__LoverDivorce,
- "PlayMusic" : self.__PlayMusic,
- # END_OF_WEDDING
- # BUFF
- "buff5" : self.__buff5,
- "buff6" : self.__buff6,
- # BUFF
- # PRIVATE_SHOP_PRICE_LIST
- "MyShopPriceList" : self.__PrivateShop_PriceList,
- # END_OF_PRIVATE_SHOP_PRICE_LIST
- ###DAILY_REWARD_SYSTEM
- "dailyReward_open" : self.dailyReward.Open,
- "dailyReward_set_reward" : self.dailyReward.SetReward,
- #CHANNEL_SWITCHER_System
- "ChannelInfo" : self.__ChannelInfo,
- "channel_switch_command" : self.__ChannelSwitchCommand,
- }
- #Teleport_System
- if constInfo.TELEPORT_SYSTEM:
- serverCommandList.update({"OpenTeleportGui" : self.__OpenTeleportGui })
- serverCommandList.update({"CloseTeleportGui" : self.__CloseTeleportGui })
- #Teleport_System_Ende
- #PICKUP_FILTER
- if app.ENABLE_PICKUP_FILTER:
- serverCommandList["setpickupmode"] = self.__SetPickupMode
- serverCommandList["setpickupblock"] = self.__SetPickupBlock
- #PICKUP_FILTER_Ende
- #ITEMSHOP_IN_GAME_System
- if constInfo.NEW_ITEMSHOP_IN_GAME:
- serverCommandList.update({"ITEMSHOP" : self.ItemShopManager })
- self.serverCommander=stringCommander.Analyzer()
- for serverCommandItem in serverCommandList.items():
- self.serverCommander.SAFE_RegisterCallBack(
- serverCommandItem[0], serverCommandItem[1]
- )
- def BINARY_ServerCommand_Run(self, line):
- #dbg.TraceError(line)
- try:
- #print " BINARY_ServerCommand_Run", line
- return self.serverCommander.Run(line)
- except RuntimeError, msg:
- dbg.TraceError(msg)
- return 0
- # BUFF
- def __buff5(self):
- net.SendChatPacket("(buff5)")
- def __buff6(self):
- net.SendChatPacket("(buff6)")
- # BUFF
- def __ProcessPreservedServerCommand(self):
- try:
- command = net.GetPreservedServerCommand()
- while command:
- print " __ProcessPreservedServerCommand", command
- self.serverCommander.Run(command)
- command = net.GetPreservedServerCommand()
- except RuntimeError, msg:
- dbg.TraceError(msg)
- return 0
- def PartyHealReady(self):
- self.interface.PartyHealReady()
- def AskSafeboxPassword(self):
- self.interface.AskSafeboxPassword()
- # ITEM_MALL
- def AskMallPassword(self):
- self.interface.AskMallPassword()
- def __ItemMall_Open(self):
- self.interface.OpenItemMall();
- def CommandCloseMall(self):
- self.interface.CommandCloseMall()
- # END_OF_ITEM_MALL
- def RefineSuceededMessage(self):
- snd.PlaySound("sound/ui/make_soket.wav")
- self.PopupMessage(localeInfo.REFINE_SUCCESS)
- def RefineFailedMessage(self):
- snd.PlaySound("sound/ui/jaeryun_fail.wav")
- self.PopupMessage(localeInfo.REFINE_FAILURE)
- def CommandCloseSafebox(self):
- self.interface.CommandCloseSafebox()
- # PRIVATE_SHOP_PRICE_LIST
- def __PrivateShop_PriceList(self, itemVNum, itemPrice):
- uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice)
- # END_OF_PRIVATE_SHOP_PRICE_LIST
- def __Horse_HideState(self):
- self.affectShower.SetHorseState(0, 0, 0)
- def __Horse_UpdateState(self, level, health, battery):
- self.affectShower.SetHorseState(int(level), int(health), int(battery))
- def __IsXMasMap(self):
- mapDict = ( "metin2_map_n_flame_01",
- "metin2_map_n_desert_01",
- "metin2_map_spiderdungeon",
- "metin2_map_deviltower1", )
- if background.GetCurrentMapName() in mapDict:
- return FALSE
- return TRUE
- def __XMasSnow_Enable(self, mode):
- self.__XMasSong_Enable(mode)
- if "1"==mode:
- if not self.__IsXMasMap():
- return
- print "XMAS_SNOW ON"
- background.EnableSnow(1)
- else:
- print "XMAS_SNOW OFF"
- background.EnableSnow(0)
- def __XMasBoom_Enable(self, mode):
- if "1"==mode:
- if not self.__IsXMasMap():
- return
- print "XMAS_BOOM ON"
- self.__DayMode_Update("dark")
- self.enableXMasBoom = TRUE
- self.startTimeXMasBoom = app.GetTime()
- else:
- print "XMAS_BOOM OFF"
- self.__DayMode_Update("light")
- self.enableXMasBoom = FALSE
- def __XMasTree_Enable(self, grade):
- print "XMAS_TREE ", grade
- background.SetXMasTree(int(grade))
- def __XMasSong_Enable(self, mode):
- if "1"==mode:
- print "XMAS_SONG ON"
- XMAS_BGM = "xmas.mp3"
- if app.IsExistFile("BGM/" + XMAS_BGM)==1:
- if musicInfo.fieldMusic != "":
- snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)
- musicInfo.fieldMusic=XMAS_BGM
- snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
- else:
- print "XMAS_SONG OFF"
- if musicInfo.fieldMusic != "":
- snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)
- musicInfo.fieldMusic=musicInfo.METIN2THEMA
- snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
- def __RestartDialog_Close(self):
- self.interface.CloseRestartDialog()
- def __Console_Enable(self):
- constInfo.CONSOLE_ENABLE = TRUE
- self.consoleEnable = TRUE
- app.EnableSpecialCameraMode()
- ui.EnablePaste(TRUE)
- ## PrivateShop
- def __PrivateShop_Open(self):
- self.interface.OpenPrivateShopInputNameDialog()
- def BINARY_PrivateShop_Appear(self, vid, text):
- self.interface.AppearPrivateShop(vid, text)
- def BINARY_PrivateShop_Disappear(self, vid):
- self.interface.DisappearPrivateShop(vid)
- ## DayMode
- def __PRESERVE_DayMode_Update(self, mode):
- if "light"==mode:
- background.SetEnvironmentData(0)
- elif "dark"==mode:
- if not self.__IsXMasMap():
- return
- background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
- background.SetEnvironmentData(1)
- def __DayMode_Update(self, mode):
- if "light"==mode:
- self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight)
- elif "dark"==mode:
- if not self.__IsXMasMap():
- return
- self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark)
- def __DayMode_OnCompleteChangeToLight(self):
- background.SetEnvironmentData(0)
- self.curtain.FadeIn()
- def __DayMode_OnCompleteChangeToDark(self):
- background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
- background.SetEnvironmentData(1)
- self.curtain.FadeIn()
- ## XMasBoom
- def __XMasBoom_Update(self):
- self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) )
- if self.indexXMasBoom >= len(self.BOOM_DATA_LIST):
- return
- boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0]
- boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1]
- if app.GetTime() - self.startTimeXMasBoom > boomTime:
- self.indexXMasBoom += 1
- for i in xrange(boomCount):
- self.__XMasBoom_Boom()
- def __XMasBoom_Boom(self):
- x, y, z = player.GetMainCharacterPosition()
- randX = app.GetRandom(-150, 150)
- randY = app.GetRandom(-150, 150)
- snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3")
- def __PartyRequestQuestion(self, vid):
- vid = int(vid)
- partyRequestQuestionDialog = uiCommon.QuestionDialog()
- partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT)
- partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT)
- partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY)
- partyRequestQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.__AnswerPartyRequest(arg))
- partyRequestQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.__AnswerPartyRequest(arg))
- partyRequestQuestionDialog.Open()
- partyRequestQuestionDialog.vid = vid
- self.partyRequestQuestionDialog = partyRequestQuestionDialog
- def __AnswerPartyRequest(self, answer):
- if not self.partyRequestQuestionDialog:
- return
- vid = self.partyRequestQuestionDialog.vid
- if answer:
- net.SendChatPacket("/party_request_accept " + str(vid))
- else:
- net.SendChatPacket("/party_request_deny " + str(vid))
- self.partyRequestQuestionDialog.Close()
- self.partyRequestQuestionDialog = None
- def __PartyRequestDenied(self):
- self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED)
- def __EnableTestServerFlag(self):
- app.EnableTestServerFlag()
- def __InGameShop_Show(self, url):
- if constInfo.IN_GAME_SHOP_ENABLE:
- self.interface.OpenWebWindow(url)
- # WEDDING
- def __LoginLover(self):
- if self.interface.wndMessenger:
- self.interface.wndMessenger.OnLoginLover()
- def __LogoutLover(self):
- if self.interface.wndMessenger:
- self.interface.wndMessenger.OnLogoutLover()
- if self.affectShower:
- self.affectShower.HideLoverState()
- def __LoverNear(self):
- if self.affectShower:
- self.affectShower.ShowLoverState()
- def __LoverFar(self):
- if self.affectShower:
- self.affectShower.HideLoverState()
- def __LoverDivorce(self):
- if self.interface.wndMessenger:
- self.interface.wndMessenger.ClearLoverInfo()
- if self.affectShower:
- self.affectShower.ClearLoverState()
- def __PlayMusic(self, flag, filename):
- flag = int(flag)
- if flag:
- snd.FadeOutAllMusic()
- musicInfo.SaveLastPlayFieldMusic()
- snd.FadeInMusic("BGM/" + filename)
- else:
- snd.FadeOutAllMusic()
- musicInfo.LoadLastPlayFieldMusic()
- snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
- # END_OF_WEDDING
- def __nopickInfo(self):
- if constInfo.pickInfo == 0:
- constInfo.pickInfo = 1
- chat.AppendChat(chat.CHAT_TYPE_INFO, "Deine Yangdropanzeige wurde aktiviert")
- elif constInfo.pickInfo == 1:
- constInfo.pickInfo = 0
- chat.AppendChat(chat.CHAT_TYPE_INFO, "Deine Yangdropanzeige wurde deaktiviert")
- def __Inputget1(self):
- constInfo.INPUT_IGNORE = 1
- def __Inputget2(self):
- constInfo.INPUT_IGNORE = 0
- def __Inputget3(self):
- net.SendQuestInputStringPacket("1")
- def __toggleSwitchbot(self):
- if self.switchbot.bot_shown == 1:
- self.switchbot.Hide()
- else:
- self.switchbot.Show()
- #Tag_Nacht_System
- def Day_Night_System(self):
- import time
- localtime = time.strftime("%H")
- if constInfo.Tag == 0:
- if localtime == "06" or localtime == "07" or localtime == "08" or localtime == "09" or localtime == "10" or localtime == "11" or localtime == "12" or localtime == "13" or localtime == "14" or localtime == "15" or localtime == "16" or localtime == "17" or localtime == "18" or localtime == "19" or localtime == "20" or localtime == "21":
- background.SetEnvironmentData(0)
- constInfo.Tag = 1
- constInfo.Nacht = 0
- if constInfo.Nacht == 0:
- if localtime == "00" or localtime == "01" or localtime == "02" or localtime == "03" or localtime == "04" or localtime == "05" or localtime == "22" or localtime == "23":
- background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
- background.SetEnvironmentData(1)
- constInfo.Tag = 0
- constInfo.Nacht = 1
- #Tag_Nacht_System_Ende
- #Teleport_System
- if constInfo.TELEPORT_SYSTEM:
- def __OpenTeleportGui(self):
- self.interface.OpenTeleportGui()
- def __CloseTeleportGui(self):
- self.interface.CloseTeleportGui()
- #Teleport_System_Ende
- if app.ENABLE_CHANNEL_SWITCHER:
- def __ReadServerData(self):
- file = open("channel.inf", "r")
- lines = file.readlines()
- file.close()
- if len(lines):
- tokens = lines[0].split()
- self.serverID = int(tokens[0])
- self.channelID = int(tokens[1])
- if len(tokens) == 3:
- self.regionID = int(tokens[2])
- else:
- self.regionID = 0
- def __ChannelInfo(self, channel):
- self.__ReadServerData()
- import net
- net.SetServerInfo(localeInfo.SWITCHCHANNEL_SERVERINFO % (int(channel)))
- file=open("channel.inf", "w")
- file.write("%d %d %d" % (int(self.serverID), int(channel), int(self.regionID)))
- file.close()
- def __ChannelSwitchCommand(self, channel):
- import net
- net.SendChatPacket("/channel_switch %d" % (int(channel)))
- #PICKUP_FILTER
- if app.ENABLE_PICKUP_FILTER:
- def __SetPickupMode(self, mode):
- constInfo.PICKUP_MODE = int(mode)
- def __SetPickupBlock(self, flag):
- constInfo.PICKUP_FLAG = int(flag)
- #ITEMSHOP_IN_GAME_System
- if constInfo.NEW_ITEMSHOP_IN_GAME:
- def ItemShopManager(self, data):
- data = data.split("#")
- if data[0] == "SET_QID":
- constInfo.itemShopInformation['qid'] = int(data[1])
- elif data[0] == "SET_CASH":
- constInfo.itemShopInformation['cash'] = int(data[1])
- elif data[0] == "SET_CATEGORY":
- constInfo.itemShopInformation['itemshop'][int(data[1])] = []
- elif data[0] == "SET_ITEM":
- constInfo.itemShopInformation['itemshop'][int(data[1])].append([int(data[2]), int(data[3]), int(data[4])])
- elif data[0] == "SET_INPUT_IGNORE":
- constInfo.INPUT_IGNORE = int(data[1])
- elif data[0] == "SET_ACTION":
- net.SendQuestInputStringPacket(constInfo.itemShopInformation['qcmd'])
- constInfo.itemShopInformation['qcmd'] = ""
- def OpenItemShopInGame(self):
- self.interface.OpenItemShopInGame()
uishop.py
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 localeInfo
- import constInfo
- ###################################################################################################
- ## 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
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- def __GetRealIndex(self, i):
- return self.tabIdx * shop.SHOP_SLOT_COUNT + i
- def Refresh(self):
- getItemID=shop.GetItemID
- getItemCount=shop.GetItemCount
- setItemID=self.itemSlotWindow.SetItemSlot
- for i in xrange(shop.SHOP_SLOT_COUNT):
- idx = self.__GetRealIndex(i)
- itemCount = getItemCount(idx)
- if itemCount <= 1:
- itemCount = 0
- setItemID(i, getItemID(idx), itemCount)
- wndMgr.RefreshSlot(self.itemSlotWindow.GetWindowHandle())
- 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")
- smallTab1 = None
- smallTab2 = None
- smallTab3 = None
- middleTab1 = None
- middleTab2 = None
- try:
- GetObject = self.GetChild
- self.itemSlotWindow = GetObject("ItemSlot")
- self.btnBuy = GetObject("BuyButton")
- self.btnSell = GetObject("SellButton")
- self.btnClose = GetObject("CloseButton")
- self.titleBar = GetObject("TitleBar")
- middleTab1 = GetObject("MiddleTab1")
- middleTab2 = GetObject("MiddleTab2")
- smallTab1 = GetObject("SmallTab1")
- smallTab2 = GetObject("SmallTab2")
- smallTab3 = GetObject("SmallTab3")
- 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.smallRadioButtonGroup = ui.RadioButtonGroup.Create([[smallTab1, lambda : self.OnClickTabButton(0), None], [smallTab2, lambda : self.OnClickTabButton(1), None], [smallTab3, lambda : self.OnClickTabButton(2), None]])
- self.middleRadioButtonGroup = ui.RadioButtonGroup.Create([[middleTab1, lambda : self.OnClickTabButton(0), None], [middleTab2, lambda : self.OnClickTabButton(1), None]])
- self.__HideMiddleTabs()
- self.__HideSmallTabs()
- self.tabIdx = 0
- self.coinType = shop.SHOP_COIN_TYPE_GOLD
- self.Refresh()
- def __ShowBuySellButton(self):
- self.btnBuy.Show()
- self.btnSell.Show()
- def __ShowMiddleTabs(self):
- self.middleRadioButtonGroup.Show()
- def __ShowSmallTabs(self):
- self.smallRadioButtonGroup.Show()
- def __HideBuySellButton(self):
- self.btnBuy.Hide()
- self.btnSell.Hide()
- def __HideMiddleTabs(self):
- self.middleRadioButtonGroup.Hide()
- def __HideSmallTabs(self):
- self.smallRadioButtonGroup.Hide()
- def __SetTabNames(self):
- if shop.GetTabCount() == 2:
- self.middleRadioButtonGroup.SetText(0, shop.GetTabName(0))
- self.middleRadioButtonGroup.SetText(1, shop.GetTabName(1))
- elif shop.GetTabCount() == 3:
- self.smallRadioButtonGroup.SetText(0, shop.GetTabName(0))
- self.smallRadioButtonGroup.SetText(1, shop.GetTabName(1))
- self.smallRadioButtonGroup.SetText(2, shop.GetTabName(2))
- def Destroy(self):
- 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.tabIdx = 0
- if isPrivateShop:
- self.__HideMiddleTabs()
- self.__HideSmallTabs()
- else:
- if shop.GetTabCount() == 1:
- self.__ShowBuySellButton()
- self.__HideMiddleTabs()
- self.__HideSmallTabs()
- elif shop.GetTabCount() == 2:
- self.__HideBuySellButton()
- self.__ShowMiddleTabs()
- self.__HideSmallTabs()
- self.__SetTabNames()
- self.middleRadioButtonGroup.OnClick(0)
- elif shop.GetTabCount() == 3:
- self.__HideBuySellButton()
- self.__HideMiddleTabs()
- self.__ShowSmallTabs()
- self.__SetTabNames()
- self.smallRadioButtonGroup.OnClick(1)
- self.Refresh()
- self.SetTop()
- self.Show()
- (self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()
- def Close(self):
- if self.itemBuyQuestionDialog:
- self.itemBuyQuestionDialog.Close()
- self.itemBuyQuestionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- if self.questionDialog:
- self.OnCloseQuestionDialog()
- shop.Close()
- net.SendShopEndPacket()
- self.CancelShopping()
- self.tooltipItem.HideToolTip()
- self.Hide()
- def GetIndexFromSlotPos(self, slotPos):
- return self.tabIdx * shop.SHOP_SLOT_COUNT + slotPos
- def OnClickTabButton(self, idx):
- self.tabIdx = idx
- self.Refresh()
- def AskClosePrivateShop(self):
- questionDialog = uiCommon.QuestionDialog()
- questionDialog.SetText(localeInfo.PRIVATE_SHOP_CLOSE_QUESTION)
- questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnClosePrivateShop))
- questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
- questionDialog.Open()
- self.questionDialog = questionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- 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, localeInfo.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
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- ## ¿ëÈ¥¼® Æȸ®´Â ±â´É Ãß°¡.
- def SellAttachedItem(self):
- if shop.IsPrivateShop():
- mouseModule.mouseController.DeattachObject()
- return
- attachedSlotType = mouseModule.mouseController.GetAttachedType()
- attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
- attachedCount = mouseModule.mouseController.GetAttachedItemCount()
- if localeInfo.IsBRAZIL() == 0:
- attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
- if app.ENABLE_SPECIAL_STORAGE:
- if player.SLOT_TYPE_INVENTORY == attachedSlotType or\
- player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType or\
- player.SLOT_TYPE_UPGRADE_INVENTORY == attachedSlotType or\
- player.SLOT_TYPE_BOOK_INVENTORY == attachedSlotType or\
- player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType:
- item.SelectItem(attachedItemIndex)
- if item.IsAntiFlag(item.ANTIFLAG_SELL):
- popup = uiCommon.PopupDialog()
- popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM)
- popup.SetAcceptEvent(self.__OnClosePopupDialog)
- popup.Open()
- self.popup = popup
- return
- itemtype = player.SlotTypeToInvenType(attachedSlotType)
- if player.IsValuableItem(itemtype, 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(localeInfo.DO_YOU_SELL_ITEM(itemName, attachedCount, itemPrice))
- questionDialog.SetAcceptEvent(lambda arg1=attachedSlotPos, arg2=attachedCount, arg3 = itemtype: self.OnSellItem(arg1, arg2, arg3))
- questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
- questionDialog.Open()
- self.questionDialog = questionDialog
- #constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- else:
- self.OnSellItem(attachedSlotPos, attachedCount, itemtype)
- else:
- snd.PlaySound("sound/ui/loginfail.wav")
- else:
- if player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType:
- if localeInfo.IsBRAZIL():
- itemIndex = player.GetItemIndex(attachedSlotPos)
- item.SelectItem(itemIndex)
- else:
- item.SelectItem(attachedItemIndex)
- if item.IsAntiFlag(item.ANTIFLAG_SELL):
- popup = uiCommon.PopupDialog()
- popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM)
- popup.SetAcceptEvent(self.__OnClosePopupDialog)
- popup.Open()
- self.popup = popup
- return
- itemtype = player.INVENTORY
- if localeInfo.IsBRAZIL() == 0:
- if player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType:
- itemtype = player.DRAGON_SOUL_INVENTORY
- if player.IsValuableItem(itemtype, 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(localeInfo.DO_YOU_SELL_ITEM(itemName, attachedCount, itemPrice))
- questionDialog.SetAcceptEvent(lambda arg1=attachedSlotPos, arg2=attachedCount, arg3 = itemtype: self.OnSellItem(arg1, arg2, arg3))
- questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
- questionDialog.Open()
- self.questionDialog = questionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- else:
- self.OnSellItem(attachedSlotPos, attachedCount, itemtype)
- else:
- snd.PlaySound("sound/ui/loginfail.wav")
- mouseModule.mouseController.DeattachObject()
- def OnSellItem(self, slotPos, count, itemtype):
- net.SendShopSellPacketNew(slotPos, count, itemtype)
- snd.PlaySound("sound/ui/money.wav")
- self.OnCloseQuestionDialog()
- def OnCloseQuestionDialog(self):
- if not self.questionDialog:
- return
- self.questionDialog.Close()
- self.questionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def SelectEmptySlot(self, selectedSlotPos):
- isAttached = mouseModule.mouseController.isAttached()
- if isAttached:
- self.SellAttachedItem()
- def UnselectItemSlot(self, selectedSlotPos):
- if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
- return
- if shop.IsPrivateShop():
- self.AskBuyItem(selectedSlotPos)
- else:
- net.SendShopBuyPacket(self.__GetRealIndex(selectedSlotPos))
- def SelectItemSlot(self, selectedSlotPos):
- if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
- return
- isAttached = mouseModule.mouseController.isAttached()
- selectedSlotPos = self.__GetRealIndex(selectedSlotPos)
- if isAttached:
- self.SellAttachedItem()
- else:
- if TRUE == shop.IsMainPlayerPrivateShop():
- return
- curCursorNum = app.GetCursor()
- if app.BUY == curCursorNum:
- self.AskBuyItem(selectedSlotPos)
- elif app.SELL == curCursorNum:
- chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.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)
- def AskBuyItem(self, slotPos):
- slotPos = self.__GetRealIndex(slotPos)
- itemIndex = shop.GetItemID(slotPos)
- itemPrice = shop.GetItemPrice(slotPos)
- itemCount = shop.GetItemCount(slotPos)
- item.SelectItem(itemIndex)
- itemName = item.GetItemName()
- itemBuyQuestionDialog = uiCommon.QuestionDialog()
- itemBuyQuestionDialog.SetText(localeInfo.DO_YOU_BUY_ITEM(itemName, itemCount, localeInfo.NumberToMoneyString(itemPrice)))
- itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerBuyItem(arg))
- itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg))
- itemBuyQuestionDialog.Open()
- itemBuyQuestionDialog.pos = slotPos
- self.itemBuyQuestionDialog = itemBuyQuestionDialog
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
- def AnswerBuyItem(self, flag):
- if flag:
- pos = self.itemBuyQuestionDialog.pos
- net.SendShopBuyPacket(pos)
- self.itemBuyQuestionDialog.Close()
- self.itemBuyQuestionDialog = None
- constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
- def SetItemToolTip(self, tooltipItem):
- self.tooltipItem = tooltipItem
- def OverInItem(self, slotIndex):
- slotIndex = self.__GetRealIndex(slotIndex)
- if mouseModule.mouseController.isAttached():
- return
- if 0 != self.tooltipItem:
- if shop.SHOP_COIN_TYPE_GOLD == shop.GetTabCoinType(self.tabIdx):
- self.tooltipItem.SetShopItem(slotIndex)
- else:
- self.tooltipItem.SetShopItemBySecondaryCoin(slotIndex)
- 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
shopdialog.py
Code- import uiScriptLocale
- window = {
- "name" : "ShopDialog",
- "x" : SCREEN_WIDTH - 400,
- "y" : 10,
- "style" : ("movable", "float",),
- "width" : 184,
- "height" : 328,
- "children" :
- (
- {
- "name" : "board",
- "type" : "board",
- "style" : ("attach",),
- "x" : 0,
- "y" : 0,
- "width" : 184,
- "height" : 328,
- "children" :
- (
- ## Title
- {
- "name" : "TitleBar",
- "type" : "titlebar",
- "style" : ("attach",),
- "x" : 8,
- "y" : 8,
- "width" : 169,
- "color" : "gray",
- "children" :
- (
- { "name":"TitleName", "type":"text", "x":84, "y":4, "text":uiScriptLocale.SHOP_TITLE, "text_horizontal_align":"center" },
- ),
- },
- ## Item Slot
- {
- "name" : "ItemSlot",
- "type" : "grid_table",
- "x" : 12,
- "y" : 34,
- "start_index" : 0,
- "x_count" : 5,
- "y_count" : 8,
- "x_step" : 32,
- "y_step" : 32,
- "image" : "d:/ymir work/ui/public/Slot_Base.sub",
- },
- ## Buy
- {
- "name" : "BuyButton",
- "type" : "toggle_button",
- "x" : 21,
- "y" : 295,
- "width" : 61,
- "height" : 21,
- "text" : uiScriptLocale.SHOP_BUY,
- "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
- },
- ## Sell
- {
- "name" : "SellButton",
- "type" : "toggle_button",
- "x" : 104,
- "y" : 295,
- "width" : 61,
- "height" : 21,
- "text" : uiScriptLocale.SHOP_SELL,
- "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
- },
- ## Close
- {
- "name" : "CloseButton",
- "type" : "button",
- "x" : 0,
- "y" : 295,
- "horizontal_align" : "center",
- "text" : uiScriptLocale.PRIVATE_SHOP_CLOSE_BUTTON,
- "default_image" : "d:/ymir work/ui/public/large_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/large_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/large_button_03.sub",
- },
- ## MiddleTab1
- {
- "name" : "MiddleTab1",
- "type" : "radio_button",
- "x" : 21,
- "y" : 295,
- "width" : 61,
- "height" : 21,
- "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
- },
- ## MiddleTab2
- {
- "name" : "MiddleTab2",
- "type" : "radio_button",
- "x" : 104,
- "y" : 295,
- "width" : 61,
- "height" : 21,
- "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
- },
- ## SmallTab1
- {
- "name" : "SmallTab1",
- "type" : "radio_button",
- "x" : 21,
- "y" : 295,
- "width" : 43,
- "height" : 21,
- "default_image" : "d:/ymir work/ui/public/small_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/small_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/small_button_03.sub",
- },
- ## SmallTab2
- {
- "name" : "SmallTab2",
- "type" : "radio_button",
- "x" : 71,
- "y" : 295,
- "width" : 43,
- "height" : 21,
- "default_image" : "d:/ymir work/ui/public/small_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/small_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/small_button_03.sub",
- },
- ## SmallTab3
- {
- "name" : "SmallTab3",
- "type" : "radio_button",
- "x" : 120,
- "y" : 295,
- "width" : 43,
- "height" : 21,
- "default_image" : "d:/ymir work/ui/public/small_button_01.sub",
- "over_image" : "d:/ymir work/ui/public/small_button_02.sub",
- "down_image" : "d:/ymir work/ui/public/small_button_03.sub",
- },
- ),
- },
- ),
- }
-
Hay ich bin auf der suche nach einer Funktion womit ich die Level und EXP pro Level aus einer .txt datei ausgelesen werden und ich es nicht im src bearbeiten muss.
-
Hay ich bin aktuell auf der suche nach einem Gildenlager das möglichst über c++ läuft.
-
Hallo, ich bin derzeit auf der suche nach einer Ingame Wiki, falls ihr wisst wo ich eine gute herbekomme oder selbst einer verkauft PM an mich bitte.
-
Hay ich habe ein Problem mit dem Extended Target Information System, da der Debug mir nichts anderes als die syserr sagt frage ich mal hier nach.
Sobald ich auf das (?) Icon Bitte melden Sie sich an, um diesen Link zu sehen.draufdrücke öffnet sich die Infobox ganz normal und zeigt mir auch alle Dropps richtig an. Aber im gleichen zug wird mir folgender Fehler in die syserr gespammt.
Code- 0324 16:14:24695 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24696 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24697 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24711 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24712 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24713 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24728 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24729 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24730 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24744 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24745 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24746 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24760 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24761 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24762 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24777 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24778 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24780 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24794 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24795 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24797 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24810 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24811 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24812 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24827 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24828 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24830 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24843 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24844 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24846 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24860 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24861 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24863 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24876 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24877 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24879 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24893 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24894 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24896 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24909 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24910 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24912 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24926 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24928 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24930 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24942 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24943 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24945 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24959 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24960 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24962 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24975 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24977 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24979 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24992 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24994 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:24996 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25008 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25009 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25011 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25025 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25026 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25028 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25041 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25043 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25045 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25058 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25060 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25063 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25074 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25076 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25077 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25091 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25093 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25094 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25107 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25109 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25111 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25124 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25126 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25128 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25140 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25142 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:14:25143 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03326 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03441 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03443 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03445 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03458 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03460 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03462 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03474 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03476 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03478 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03491 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03493 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03495 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03507 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03509 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03510 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03524 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03526 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03528 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03540 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03542 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03544 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03557 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03560 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03561 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03573 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03575 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03577 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03590 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03592 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03594 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03606 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03608 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03610 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03623 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03625 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03627 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03639 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03641 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03643 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03656 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03658 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03660 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03672 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03674 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03676 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03689 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03691 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03693 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03705 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03707 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03709 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03722 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03724 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03726 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03738 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03740 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03742 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03755 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03757 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03759 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03771 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03773 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03775 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03788 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03790 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03792 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03804 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03806 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03808 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03821 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03823 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03825 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03837 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03839 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03841 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03854 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03856 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03858 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03870 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03872 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03874 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03887 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03889 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03891 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03903 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03905 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03908 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03920 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03922 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03924 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03936 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03938 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03940 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03953 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03955 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03957 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03969 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03971 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03973 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03986 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03988 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:03990 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04002 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04004 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04006 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04019 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04021 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04023 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04035 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04038 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04040 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04052 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04054 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04056 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04068 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04070 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04072 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04085 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04088 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04090 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04102 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04104 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04106 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04118 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04120 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04122 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04134 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04136 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04138 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04151 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04153 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04155 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04168 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04169 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04171 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04184 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04186 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04188 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04200 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04202 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04204 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04217 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04219 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04221 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04233 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04235 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04237 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04250 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04252 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04254 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04266 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04268 :: Invalid AppendItem height 39 stepSize 37
- 0324 16:17:04270 :: Invalid AppendItem height 39 stepSize 37
Vielleicht weiß einer von euch woher der Fehler kommt.
EDIT. Habe den Fehler selbst beheben können, es lag an meiner mob_drop_item.txt ich hatte bei einem dropp einen Zahlendreher gehabt. Bei Aktuell 320 Drops pro Mob nur für "testzwecke" kann ein Fehler ja passieren hoffe das hilft einem, wenn er den selben Fehler hat.
-
es ist kein Source part von deinem Server oder der Binary schau in deinem dump_proto ordner rein )
der ist leer xD
Bitte melden Sie sich an, um diesen Link zu sehen.
-
Bei mir war das bereits drinnen, darum ist es im Tutorial nicht mit eingebunden. Danke für die Info!
Für alle anderen:
Suchen:
Hinzufügen:
Suchen:
Darüber sollte zweimal col++ stehen. Diese einfach hiermit ersetzen:
gibt es auch die die Fliege Files dazu ein fix.
finde dazu nichts im Client oder Server Sourcees ist kein Source part von deinem Server oder der Binary schau in deinem dump_proto ordner rein )
-
Hay ich suche zurzeit ein Offline Shop System das Bug free ist. Natürlich könnte ich mir eins von Ikarus Kaufen allerdings ich Persönlich finde den Aufbau hässlich, nur meine Meinung.
Deswegen frage ich euch wen kennt ihr so der eins Verkauft ? oder evtl. eins das Pub ist und eine Solide Basis bietet.