62
.gitignore
vendored
62
.gitignore
vendored
@@ -8,3 +8,65 @@ ErrorLog.txt
|
|||||||
/*.exe
|
/*.exe
|
||||||
!/config.exe
|
!/config.exe
|
||||||
!/Metin2.exe
|
!/Metin2.exe
|
||||||
|
|
||||||
|
# =======================================================
|
||||||
|
# FULLY CASE-INSENSITIVE BACKUP EXCLUSIONS
|
||||||
|
# Matches all files and folders ending in:
|
||||||
|
# _BK, _BAK, .BK, .BAK (and all case permutations)
|
||||||
|
# =======================================================
|
||||||
|
|
||||||
|
# -------------------------------------------------------
|
||||||
|
# 1. EXCLUSIONS ENDING IN .BK / _BK
|
||||||
|
# -------------------------------------------------------
|
||||||
|
|
||||||
|
# Files/Folders ending in _BK (e.g., File_Bk, Folder_bK)
|
||||||
|
*_BK
|
||||||
|
*_Bk
|
||||||
|
*_bK
|
||||||
|
*_bk
|
||||||
|
|
||||||
|
# Files ending in .BK (e.g., File.BK, File.bK)
|
||||||
|
*.BK
|
||||||
|
*.Bk
|
||||||
|
*.bK
|
||||||
|
*.bk
|
||||||
|
|
||||||
|
# Files ending in "double extension" .X.BK (e.g., File.txt.Bk)
|
||||||
|
*.*.BK
|
||||||
|
*.*.Bk
|
||||||
|
*.*.bK
|
||||||
|
*.*.bk
|
||||||
|
|
||||||
|
# -------------------------------------------------------
|
||||||
|
# 2. EXCLUSIONS ENDING IN .BAK / _BAK
|
||||||
|
# -------------------------------------------------------
|
||||||
|
|
||||||
|
# Files/Folders ending in _BAK (e.g., File_BAK, Folder_bak)
|
||||||
|
*_BAK
|
||||||
|
*_BAk
|
||||||
|
*_BaK
|
||||||
|
*_Bak
|
||||||
|
*_bAK
|
||||||
|
*_bAk
|
||||||
|
*_baK
|
||||||
|
*_bak
|
||||||
|
|
||||||
|
# Files ending in .BAK (e.g., File.BAK, File.bak)
|
||||||
|
*.BAK
|
||||||
|
*.BAk
|
||||||
|
*.BaK
|
||||||
|
*.Bak
|
||||||
|
*.bAK
|
||||||
|
*.bAk
|
||||||
|
*.baK
|
||||||
|
*.bak
|
||||||
|
|
||||||
|
# Files ending in "double extension" .X.BAK (e.g., File.txt.Bak)
|
||||||
|
*.*.BAK
|
||||||
|
*.*.BAk
|
||||||
|
*.*.BaK
|
||||||
|
*.*.Bak
|
||||||
|
*.*.bAK
|
||||||
|
*.*.bAk
|
||||||
|
*.*.baK
|
||||||
|
*.*.bak
|
||||||
|
|||||||
34
README.md
34
README.md
@@ -2,16 +2,28 @@
|
|||||||
|
|
||||||
This repository contains all client-side data, including locale files, configurations, and descriptive text used by the game client.
|
This repository contains all client-side data, including locale files, configurations, and descriptive text used by the game client.
|
||||||
|
|
||||||
## ✨ Critical Fix: Skill 19 Speed Sync
|
## Changelog 📋
|
||||||
|
|
||||||
Sync with the fix in the server's `skill_proto` to resolve an issue where characters became unable to move after being affected by Strong Body (due to an incorrect `MOV_SPEED` value).
|
### 🐛 Bug Fixes
|
||||||
|
* **Skill 19:** Applied the correct `MOV_SPEED` value fix for Skill 19 across all locales.
|
||||||
|
* **Messenger - UI:** Fixed a critical UI issue where the name of a recently removed friend would sometimes appear on top of the next name in the list, or the "Empty" string, if it was selected during the removal process.
|
||||||
|
|
||||||
This client repository contains the necessary sync fix:
|
### ⬆️ Feature Improvements
|
||||||
|
* **Messenger System:**
|
||||||
* **Fixed `MOV_SPEED` value for Skill 19** in `locale/en/skilldesc.txt` and `locale/en/skilltable.txt`.
|
* **Live Status Updates:** Live updates for adding/removing friend for both parties.
|
||||||
|
* **Auto-Deselect:** When a player removes a friend, or is removed by one, the entry is automatically deselected in the Messenger window.
|
||||||
### ⚠️ IMPORTANT: Locale Synchronization
|
* **Early Initialization:** The Messenger window is now automatically initialized (without visually opening the window) upon starting the game phase, allowing it to receive real-time updates from the very beginning.
|
||||||
|
* **Request Handling:** Pressing the `Escape` key while the request dialog is open now denies the request normally.
|
||||||
The fix listed above has **only been applied to the `locale/en` (English) files.**
|
* **Button State:** The Whisper and Delete buttons are automatically disabled when removing/getting removed by a friend with the Messenger window open.
|
||||||
|
* **Target board:** The "Friend" button dynamically updates upon adding/removing a friend for both parties, if target is focused.
|
||||||
**If you use any other locale (e.g., German, French, etc.), you must manually update the `MOV_SPEED` value for Skill 19 in your respective `skilldesc.txt` and `skilltable.txt` files to match the change.**
|
* **Inventory Management:** Inventory calculations are now correctly designed to handle togglable item activation effects across any number of inventory pages by calculating `page total slots * total pages`.
|
||||||
|
* **Skill Cooldowns and States:** A massive update to ensure reliability across various scenarios:
|
||||||
|
* **Window/Taskbar Persistence:** Cooldowns and active slot effects are now correctly maintained and updated in the Character Window and Taskbar during actions such as: repositioning skills, leveling up, changing skill grades (including Perfect), mounting/unmounting, changing Character Window pages, switching Skill View tabs, closing/reopening the window, and relogging. Supports togglable, non-togglable, and togglable-with-cooldown skills.
|
||||||
|
* **Level Reset Clearing:** Skill cooldowns and active slot states are properly cleared when the skill level is reset to 0.
|
||||||
|
* **Support togglables:** Combo automatically deactivates if its level is changed to 0 (e.g., via `/setsk`).
|
||||||
|
* **Horse Skill Cooldowns:** Horse skill cooldowns are cleared if their level is changed to 0.
|
||||||
|
* **Horse Skill View Logic:** The Horse skills page now correctly appears when the riding skill (Skill 130) reaches **level 21+** (not 20+).
|
||||||
|
* **Taskbar Sync:** Horse skills are automatically removed from the Taskbar, and the Skill View switches pages automatically, if the riding skill level drops below 21 (e.g., via `/setsk`).
|
||||||
|
* **Skill group 0 support for Horse page:** The Horse skill page is now visible even if there are no skills assigned to that group, provided the riding skill level is high enough.
|
||||||
|
* **Support skill levels:** Support and Horse skill states are correctly maintained when the character's skill group is reset.
|
||||||
|
* **.gitignore file:** Ignoring all files and directories ending in `_BAK` or `.BAK` (case-insensitive)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Průraz Tlaková vlna Útok Tsunami Napadáš nepřítele frontálně. Čelní prorážecí útok ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Průraz Tlaková vlna Útok Tsunami Napadáš nepřítele frontálně. Čelní prorážecí útok ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Prudká rána Prudká tygří rána Prudká dračí rána Napadáš nepřítele frontálně Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Prudká rána Prudká tygří rána Prudká dračí rána Napadáš nepřítele frontálně Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Dupnutí Dupnutí lva Dupnutí nosorožce Poval několik nepřátel Prorážecí útok Šance na bezvědomí ATTACK_SKILL|STANDING_SKILL daejin 18 4 Hodnota útoku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Šance na bezvědomí: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Dupnutí Dupnutí lva Dupnutí nosorožce Poval několik nepřátel Prorážecí útok Šance na bezvědomí ATTACK_SKILL|STANDING_SKILL daejin 18 4 Hodnota útoku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Šance na bezvědomí: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Silné tělo Tělo ze železa Tělo z oceli Tvoje obrana se dočasně zlepší a nebudeš padat k zemi. Obrana se zlepší Snižuje rychlost pohybu Neskácet se STANDING_SKILL cheongeun 19 4 Obrana: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rychlost pohybů: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Silné tělo Tělo ze železa Tělo z oceli Tvoje obrana se dočasně zlepší a nebudeš padat k zemi. Obrana se zlepší Snižuje rychlost pohybu Neskácet se STANDING_SKILL cheongeun 19 4 Obrana: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rychlost pohybů: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Smršť meče Šavlový tanec Cyklón Rozvíři meč, aby napadl více nepřátel Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Hodnota útoku: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Smršť meče Šavlový tanec Cyklón Rozvíři meč, aby napadl více nepřátel Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Hodnota útoku: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Rána mečem Bodnutí mečem Vrh mečem Napadáš nepřítele frontálně. Útok na dálku Útok na vícero cílů Bezvědomí převrhne cíl ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Hodnota útoku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Šance na bezvědomí: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Rána mečem Bodnutí mečem Vrh mečem Napadáš nepřítele frontálně. Útok na dálku Útok na vícero cílů Bezvědomí převrhne cíl ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Hodnota útoku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Šance na bezvědomí: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Bojové zuření Vztek Zběsilost Soustředíš se pouze na útočení. Rychlost útoku se zvyšuje Zvyšuje rychlost pohybu Zvyšuje náchylnost k poškození STANDING_SKILL jeongwi 3 4 Rychlost útoku +%.0f%% 50 * SkillPoint Rychlost pohybu +%.0f%% 20 * SkillPoint
|
3 WARRIOR Bojové zuření Vztek Zběsilost Soustředíš se pouze na útočení. Rychlost útoku se zvyšuje Zvyšuje rychlost pohybu Zvyšuje náchylnost k poškození STANDING_SKILL jeongwi 3 4 Rychlost útoku +%.0f%% 50 * SkillPoint Rychlost pohybu +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Durchschlag Druckwelle Tsunami-Angriff Du greifst die Feinde frontal an. Frontaler Durchschlag-Angriff ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angriffswert %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Durchschlag Druckwelle Tsunami-Angriff Du greifst die Feinde frontal an. Frontaler Durchschlag-Angriff ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angriffswert %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Heftiges Schlagen Heftiger Tigerschlag Heftiger Drachenschlag Du greifst die Feinde frontal an. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angriffswert %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Heftiges Schlagen Heftiger Tigerschlag Heftiger Drachenschlag Du greifst die Feinde frontal an. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angriffswert %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Stampfer Löwenstampfer Rhinozerosstampfer Wirf mehrere Feinde um. Durchschlag-Angriff Ohnmachtschance ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angriffswert %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ohnmachtschance %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Stampfer Löwenstampfer Rhinozerosstampfer Wirf mehrere Feinde um. Durchschlag-Angriff Ohnmachtschance ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angriffswert %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ohnmachtschance %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Starker Körper Körper aus Eisen Körper aus Stahl Deine Verteidigung wird eine Zeit lang besser und du fällst nicht zu Boden. Verteidigung wird verbessert Verringert die Bewegungsgeschwindigkeit Kein Umfallen STANDING_SKILL cheongeun 19 4 Verteidigung: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bewegungsgeschwindigkeit: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Starker Körper Körper aus Eisen Körper aus Stahl Deine Verteidigung wird eine Zeit lang besser und du fällst nicht zu Boden. Verteidigung wird verbessert Verringert die Bewegungsgeschwindigkeit Kein Umfallen STANDING_SKILL cheongeun 19 4 Verteidigung: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bewegungsgeschwindigkeit: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Schwertwirbel Schwerttanz Zyklon Wirbel das Schwert herum, um mehrere Feinde anzugreifen. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angriffswert %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Schwertwirbel Schwerttanz Zyklon Wirbel das Schwert herum, um mehrere Feinde anzugreifen. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angriffswert %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Schwertschlag Schwertstoß Schwertwurf Du greifst die Feinde frontal an. Fern-Angriff Angriff auf mehrere Ziele Ohnmacht Schlägt das Ziel zu Boden ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angriffswert %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ohnmachtschance %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Schwertschlag Schwertstoß Schwertwurf Du greifst die Feinde frontal an. Fern-Angriff Angriff auf mehrere Ziele Ohnmacht Schlägt das Ziel zu Boden ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angriffswert %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ohnmachtschance %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Kampfrausch Wut Raserei Du konzentrierst dich ausschließlich auf das Angreifen. Angriffsgeschwindigkeit wird erhöht Erhöht die Bewegungsgeschwindigkeit Erhöht die Schadensanfälligkeit STANDING_SKILL jeongwi 3 4 Angriffsgeschwindigkeit +%.0f%% 50 * SkillPoint Bewegungsgeschwindigkeit +%.0f%% 20 * SkillPoint
|
3 WARRIOR Kampfrausch Wut Raserei Du konzentrierst dich ausschließlich auf das Angreifen. Angriffsgeschwindigkeit wird erhöht Erhöht die Bewegungsgeschwindigkeit Erhöht die Schadensanfälligkeit STANDING_SKILL jeongwi 3 4 Angriffsgeschwindigkeit +%.0f%% 50 * SkillPoint Bewegungsgeschwindigkeit +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Gennemgående slag Trykbølge Tsunami-angreb Du angriber fjenden frontalt. Frontalt angreb ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Gennemgående slag Trykbølge Tsunami-angreb Du angriber fjenden frontalt. Frontalt angreb ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Voldsomme stød Voldsomme tigerstød Voldsomme dragestød Du angriber fjenden frontalt Gennembruds angreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Voldsomme stød Voldsomme tigerstød Voldsomme dragestød Du angriber fjenden frontalt Gennembruds angreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Trampning Løvens trampning Rhinoceros trampning Stød mod flere fjender Gennembruds-angreb Sandsynlighed for besvimelse ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angrebsstyrke %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sandsynlighed for besvimelses %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Trampning Løvens trampning Rhinoceros trampning Stød mod flere fjender Gennembruds-angreb Sandsynlighed for besvimelse ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angrebsstyrke %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sandsynlighed for besvimelses %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Stærk krop Krop af jern Krop af stål Dit forsvar forøges, og du kan ikke væltes. Forsvar forøges Bevægelseshastigheden sænkes Ingen væltning STANDING_SKILL cheongeun 19 4 Forsvar: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bevægelseshastighed: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Stærk krop Krop af jern Krop af stål Dit forsvar forøges, og du kan ikke væltes. Forsvar forøges Bevægelseshastigheden sænkes Ingen væltning STANDING_SKILL cheongeun 19 4 Forsvar: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bevægelseshastighed: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Sværd-hvirvel Sværd-dans Zyklon Hvirvler omkring med sværdet Gennemslagssangreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angrebsværdi %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Sværd-hvirvel Sværd-dans Zyklon Hvirvler omkring med sværdet Gennemslagssangreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angrebsværdi %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Sværdstødet Forbedret sværdstød Sværdkast Du angriber fjenden frontalt. Distance-angreb Angreb på flere fjender Besvimelse Vælter målet ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angrebsstyrke %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sandsynlighed for besvimelse: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Sværdstødet Forbedret sværdstød Sværdkast Du angriber fjenden frontalt. Distance-angreb Angreb på flere fjender Besvimelse Vælter målet ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angrebsstyrke %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sandsynlighed for besvimelse: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Berserk Vrede Raseri Du koncentrerer dig udelukkende om angrebet Angrebshastigheden forøges Bevægelseshastigheden forøges Forøger modtaget skade STANDING_SKILL jeongwi 3 4 Angrebshastighed +%.0f%% 50 * SkillPoint Bevægelseshastighed +%.0f%% 20 * SkillPoint
|
3 WARRIOR Berserk Vrede Raseri Du koncentrerer dig udelukkende om angrebet Angrebshastigheden forøges Bevægelseshastigheden forøges Forøger modtaget skade STANDING_SKILL jeongwi 3 4 Angrebshastighed +%.0f%% 50 * SkillPoint Bevægelseshastighed +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Pulso Espiritual Onda de Choque Ataque Tsunami Ataca directamente a los enemigos. Ataque frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Pulso Espiritual Onda de Choque Ataque Tsunami Ataca directamente a los enemigos. Ataque frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Golpe Golpe de Tigre Golpe de Dragón Ataca directamente a los enemigos Ataque fuerte Ataque a múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Golpe Golpe de Tigre Golpe de Dragón Ataca directamente a los enemigos Ataque fuerte Ataque a múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Tocón Tocón de Leon Tocón de Rinoceronte Derriba a varios enemigos. Ataque fuerte Probabilidad de desmayo ATTACK_SKILL|STANDING_SKILL daejin 18 4 Fuerza de ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidad de desmayo %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Tocón Tocón de Leon Tocón de Rinoceronte Derriba a varios enemigos. Ataque fuerte Probabilidad de desmayo ATTACK_SKILL|STANDING_SKILL daejin 18 4 Fuerza de ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidad de desmayo %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Cuerpo fuerte Cuerpo de hierro Cuerpo de acero Aumenta tu defensa por un período de tiempo y no caes al suelo. Incrementa defensa Disminuye velocidad de movimiento No caes STANDING_SKILL cheongeun 19 4 Defensa : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocidad de movimiento : -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Cuerpo fuerte Cuerpo de hierro Cuerpo de acero Aumenta tu defensa por un período de tiempo y no caes al suelo. Incrementa defensa Disminuye velocidad de movimiento No caes STANDING_SKILL cheongeun 19 4 Defensa : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocidad de movimiento : -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Giro de espada Danza de la espada Ciclón Gira la espada para atacar a varios enemigos Ataque frontal Ataque de múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Fuerza de ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Giro de espada Danza de la espada Ciclón Gira la espada para atacar a varios enemigos Ataque frontal Ataque de múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Fuerza de ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Golpe de espada Rayo de espada Lanzamiento de espada Atacas de frente al enemigo. Ataque de largo alcance Ataque a múltiples objetivos Efecto de desmayo Derriba al objetivo al suelo ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Fuerza de ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidad de desmayo %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Golpe de espada Rayo de espada Lanzamiento de espada Atacas de frente al enemigo. Ataque de largo alcance Ataque a múltiples objetivos Efecto de desmayo Derriba al objetivo al suelo ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Fuerza de ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidad de desmayo %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Berserk Furia Frenesí Solo concentración en el ataque Incrementa velocidad de ataque Incrementa velocidad de movimiento Incrementa daño recibido STANDING_SKILL jeongwi 3 4 Velocidad de Ataque +%.0f%% 50 * SkillPoint Velocidad de Movimiento +%.0f%% 20 * SkillPoint
|
3 WARRIOR Berserk Furia Frenesí Solo concentración en el ataque Incrementa velocidad de ataque Incrementa velocidad de movimiento Incrementa daño recibido STANDING_SKILL jeongwi 3 4 Velocidad de Ataque +%.0f%% 50 * SkillPoint Velocidad de Movimiento +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Attaque de l'Esprit Onde de choc Attaque Tsunami Attaque directement les ennemis. Attaque frontale violente ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Attaque de l'Esprit Onde de choc Attaque Tsunami Attaque directement les ennemis. Attaque frontale violente ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Attaque de la paume Paume du Tigre Paume du Dragon Attaque directement les ennemis. Attaque directe violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Attaque de la paume Paume du Tigre Paume du Dragon Attaque directement les ennemis. Attaque directe violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Charge Charge du lion Charge du rhino Renverse plusieurs ennemis. Attaque directe violente Chance de provoquer un évanouissement ATTACK_SKILL|STANDING_SKILL daejin 18 4 Puissance de l'attaque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Chance d'évanouissament : %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Charge Charge du lion Charge du rhino Renverse plusieurs ennemis. Attaque directe violente Chance de provoquer un évanouissement ATTACK_SKILL|STANDING_SKILL daejin 18 4 Puissance de l'attaque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Chance d'évanouissament : %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Corps puissant Corps de fer Corps d'acier Augmente temporairement votre défense et empêche que vous soyez renversé Augmente la Défense Diminue la vitesse de déplacement Empêche que vous soyez renversé STANDING_SKILL cheongeun 19 4 Défense : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Vitesse de déplacement : -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Corps puissant Corps de fer Corps d'acier Augmente temporairement votre défense et empêche que vous soyez renversé Augmente la Défense Diminue la vitesse de déplacement Empêche que vous soyez renversé STANDING_SKILL cheongeun 19 4 Défense : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Vitesse de déplacement : -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Moulinet à l'épée Danse de l'épée Cyclone Effectue des moulinets de l'épée pour attaquer plusieurs ennemis. Attaque frontale violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Puissance de l'attaque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Moulinet à l'épée Danse de l'épée Cyclone Effectue des moulinets de l'épée pour attaquer plusieurs ennemis. Attaque frontale violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Puissance de l'attaque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Coup d'épée Coup d'épée foudroyant Jet d'épée Attaque frontalement les ennemis. Attaque à distance Attaque plusieurs cibles Attaque assomante Fait chuter vos ennemis ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valeur d'attaque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Chance d'assomer : %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Coup d'épée Coup d'épée foudroyant Jet d'épée Attaque frontalement les ennemis. Attaque à distance Attaque plusieurs cibles Attaque assomante Fait chuter vos ennemis ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valeur d'attaque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Chance d'assomer : %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Berserk Furie Frénésie Uniquement concentré sur l'attaque. Augmente la vitesse d'attaque Augmente la vitesse de déplacement Augmente les dommages reçus STANDING_SKILL jeongwi 3 4 Vitesse d'attaque +%.0f%% 50 * SkillPoint Vitesse de déplacement +%.0f%% 20 * SkillPoint
|
3 WARRIOR Berserk Furie Frénésie Uniquement concentré sur l'attaque. Augmente la vitesse d'attaque Augmente la vitesse de déplacement Augmente les dommages reçus STANDING_SKILL jeongwi 3 4 Vitesse d'attaque +%.0f%% 50 * SkillPoint Vitesse de déplacement +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Πνευματική Επίθεση (W) Κρουστικό Κύμα Επίθεση Tsunami Κατά μέτωπο επίθεση Μετωπική Μαζική Επίθεση ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Πνευματική Επίθεση (W) Κρουστικό Κύμα Επίθεση Tsunami Κατά μέτωπο επίθεση Μετωπική Μαζική Επίθεση ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Δυνατό χτύπημα Δυνατό χτύπημα της Τίγρης Δυνατό χτύπημα του Δράκου Κατά μέτωπο επίθεση Πνευματική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Δυνατό χτύπημα Δυνατό χτύπημα της Τίγρης Δυνατό χτύπημα του Δράκου Κατά μέτωπο επίθεση Πνευματική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Ποδοπάτημα Ποδοπάτημα του Λέοντα Ποδοπάτημα του Ρινόκερου Ρίξε πολλούς εχθρούς. Ευθεία Μαζική Επίθεση Πιθανότητα λιποθυμίας ATTACK_SKILL|STANDING_SKILL daejin 18 4 Δύναμη Επίθεσης %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Πιθανότητες Λιποθυμίας: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Ποδοπάτημα Ποδοπάτημα του Λέοντα Ποδοπάτημα του Ρινόκερου Ρίξε πολλούς εχθρούς. Ευθεία Μαζική Επίθεση Πιθανότητα λιποθυμίας ATTACK_SKILL|STANDING_SKILL daejin 18 4 Δύναμη Επίθεσης %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Πιθανότητες Λιποθυμίας: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Δυνατό Σώμα Σιδηρούν Σώμα Ατσάλινο Σώμα Αυξάνει την άμυνα και δεν πέφτεις Αυξάνει την άμυνα Μειώνει την ταχύτητα κίνησης Δεν πέφτεις ποτέ STANDING_SKILL cheongeun 19 4 ’μυνα : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Ταχύτητα Κίνησης : -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Δυνατό Σώμα Σιδηρούν Σώμα Ατσάλινο Σώμα Αυξάνει την άμυνα και δεν πέφτεις Αυξάνει την άμυνα Μειώνει την ταχύτητα κίνησης Δεν πέφτεις ποτέ STANDING_SKILL cheongeun 19 4 ’μυνα : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Ταχύτητα Κίνησης : -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Στριφογύρισμα σπαθιού Χορός Σπαθιών Κυκλώνας Στριφογύρισμα του σπαθιού για επίθεση σε πολλούς αντιπάλους. Μετωπική Μαζική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Δύναμη Επίθεσης %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Στριφογύρισμα σπαθιού Χορός Σπαθιών Κυκλώνας Στριφογύρισμα του σπαθιού για επίθεση σε πολλούς αντιπάλους. Μετωπική Μαζική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Δύναμη Επίθεσης %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Χτύπημα Σπαθιού Βίδωμα Σπαθιού Εκτίναξη Σπαθιού Κατά μέτωπο επίθεση. Μακρινή Επίθεση Επίθεση σε Πολλαπλούς Στόχους Λιποθυμία Ρίχνει τον στόχο. ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Δύναμη Επίθεσης %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Πιθανότητες Λιποθυμίας: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Χτύπημα Σπαθιού Βίδωμα Σπαθιού Εκτίναξη Σπαθιού Κατά μέτωπο επίθεση. Μακρινή Επίθεση Επίθεση σε Πολλαπλούς Στόχους Λιποθυμία Ρίχνει τον στόχο. ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Δύναμη Επίθεσης %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Πιθανότητες Λιποθυμίας: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Έξαλλος Οργισμένος Μανιακός Επικέντρωση στην Επίθεση Αυξάνει την Ταχύτητα της Επίθεσης Αυξάνει την ταχύτητα Κίνησης Αυξάνει την ζημιά που δέχεσε STANDING_SKILL jeongwi 3 4 Ταχύτητα Επίθεσης +%.0f%% 50 * SkillPoint Ταχύτητα Κίνησης +%.0f%% 20 * SkillPoint
|
3 WARRIOR Έξαλλος Οργισμένος Μανιακός Επικέντρωση στην Επίθεση Αυξάνει την Ταχύτητα της Επίθεσης Αυξάνει την ταχύτητα Κίνησης Αυξάνει την ζημιά που δέχεσε STANDING_SKILL jeongwi 3 4 Ταχύτητα Επίθεσης +%.0f%% 50 * SkillPoint Ταχύτητα Κίνησης +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint
|
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Penetrazione Ondata di pressione Attacco Tsunami Attacchi i nemici frontalmente. Attacco trafiggente frontale ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Penetrazione Ondata di pressione Attacco Tsunami Attacchi i nemici frontalmente. Attacco trafiggente frontale ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Colpire duramente Potente colpo di tigre Potente colpo del drago Attacchi i nemici frontalmente. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Colpire duramente Potente colpo di tigre Potente colpo del drago Attacchi i nemici frontalmente. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Pestone Pestone di leone Pestone di rinoceronte Fai cadere più nemici. Attacco trafiggente Possibilità di svenimento ATTACK_SKILL|STANDING_SKILL daejin 18 4 Valore di attacco %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilità di svenimento: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Pestone Pestone di leone Pestone di rinoceronte Fai cadere più nemici. Attacco trafiggente Possibilità di svenimento ATTACK_SKILL|STANDING_SKILL daejin 18 4 Valore di attacco %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilità di svenimento: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Corpo forte Corpo di ferro Corpo di acciaio La tua difesa migliora temporaneamente e non cadi a terra. La difesa viene migliorata Diminuisce la velocità di movimento Non si cade STANDING_SKILL cheongeun 19 4 Difesa +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocità di movimento -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Corpo forte Corpo di ferro Corpo di acciaio La tua difesa migliora temporaneamente e non cadi a terra. La difesa viene migliorata Diminuisce la velocità di movimento Non si cade STANDING_SKILL cheongeun 19 4 Difesa +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocità di movimento -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Vortice della spada Danza della spada Ciclone Fai girare vorticosamente la spada per attaccare più nemici. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Valore di attacco %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Vortice della spada Danza della spada Ciclone Fai girare vorticosamente la spada per attaccare più nemici. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Valore di attacco %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Colpo di spada Stoccata di spada Lancio della spada Attacchi i nemici frontalmente. Attacco da lontano Attacco a più bersagli Svenimento Fa cadere il bersaglio ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valore di attacco %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilità di svenimento: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Colpo di spada Stoccata di spada Lancio della spada Attacchi i nemici frontalmente. Attacco da lontano Attacco a più bersagli Svenimento Fa cadere il bersaglio ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valore di attacco %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilità di svenimento: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Estasi da combattimento Rabbia Frenesia Ti concentri esclusivamente sull'attaccare Aumenta la velocità d'attacco Aumenta la velocità di movimento Aumenta la vulnerabilità al danno STANDING_SKILL jeongwi 3 4 Velocità di attacco +%.0f%% 50 * SkillPoint Velocità di movimento +%.0f%% 20 * SkillPoint
|
3 WARRIOR Estasi da combattimento Rabbia Frenesia Ti concentri esclusivamente sull'attaccare Aumenta la velocità d'attacco Aumenta la velocità di movimento Aumenta la vulnerabilità al danno STANDING_SKILL jeongwi 3 4 Velocità di attacco +%.0f%% 50 * SkillPoint Velocità di movimento +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint
|
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Duchowe Uderzenie Fala Uderzeniowa Atak Tsunami Atakuje centralnie wrogów Frontalny atak rozpryskowy ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Duchowe Uderzenie Fala Uderzeniowa Atak Tsunami Atakuje centralnie wrogów Frontalny atak rozpryskowy ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Walnięcie Tygrysie walnięcie Smocze Powalenie Atakuje centralnie wrogów Prosty rozpryskowy atak Atak skierowany w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Walnięcie Tygrysie walnięcie Smocze Powalenie Atakuje centralnie wrogów Prosty rozpryskowy atak Atak skierowany w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Tąpnięcie Tąpnięcia Lwa Tąpnięcie Nosorożca Zwal z nóg kilku wrogów. Frontalny atak rozpryskowy Szansa na Omdlenie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Siła Ataku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Szansa na Omdlenie %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Tąpnięcie Tąpnięcia Lwa Tąpnięcie Nosorożca Zwal z nóg kilku wrogów. Frontalny atak rozpryskowy Szansa na Omdlenie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Siła Ataku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Szansa na Omdlenie %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Silne Ciało Żelazne Ciało Stalowe Ciało Zwiększa Obronę i pomaga wygrać Zwiększa Obronę Zmniejsza Szybkość Ruchu Nigdy nie upadasz STANDING_SKILL cheongeun 19 4 Obrona: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Szybkość Ruchu: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Silne Ciało Żelazne Ciało Stalowe Ciało Zwiększa Obronę i pomaga wygrać Zwiększa Obronę Zmniejsza Szybkość Ruchu Nigdy nie upadasz STANDING_SKILL cheongeun 19 4 Obrona: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Szybkość Ruchu: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Wir Miecza Taniec Miecza Cyklon Wiruj mieczem aby atakować wielu przeciwników Frontalny atak rozpryskowy Atak w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Siła Ataku %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Wir Miecza Taniec Miecza Cyklon Wiruj mieczem aby atakować wielu przeciwników Frontalny atak rozpryskowy Atak w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Siła Ataku %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Uderzenie Miecza Pchnięcie Miecza Rzut Miecza atakujesz wrogów bezpośrednio Atak z dystansu Atak skierowany na kilka celów Omdlenie Powala cel na ziemię ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Siła Ataku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Szansa na Omdlenie %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Uderzenie Miecza Pchnięcie Miecza Rzut Miecza atakujesz wrogów bezpośrednio Atak z dystansu Atak skierowany na kilka celów Omdlenie Powala cel na ziemię ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Siła Ataku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Szansa na Omdlenie %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Berserk Furia Szał Koncentracja tylko na ataku Zwiększa Szybkość Ataku Zwiększa Szybkość Ruchu Zwiększa otrzymywane obrażenia STANDING_SKILL jeongwi 3 4 Szybkość Ataku +%.0f%% 50 * SkillPoint Szybkość Ruchu +%.0f%% 20 * SkillPoint
|
3 WARRIOR Berserk Furia Szał Koncentracja tylko na ataku Zwiększa Szybkość Ataku Zwiększa Szybkość Ruchu Zwiększa otrzymywane obrażenia STANDING_SKILL jeongwi 3 4 Szybkość Ataku +%.0f%% 50 * SkillPoint Szybkość Ruchu +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Força do Golpe Onda de Choque Ataque Tsunami Ataca inimigos directamente. Ataque Residual Frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Força do Golpe Onda de Choque Ataque Tsunami Ataca inimigos directamente. Ataque Residual Frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Ataque Destrutivo Garra do Tigre Garra do Dragão Ataca inimigos directamente. Ataque Residual Directo Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Ataque Destrutivo Garra do Tigre Garra do Dragão Ataca inimigos directamente. Ataque Residual Directo Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Terramoto Terramoto Leão Terramoto Rinoceronte Derruba vários inimigos. Ataque Residual Directo Probabilidade de Efeito Atordoante ATTACK_SKILL|STANDING_SKILL daejin 18 4 Poder de Ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidade de Atordoamento %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Terramoto Terramoto Leão Terramoto Rinoceronte Derruba vários inimigos. Ataque Residual Directo Probabilidade de Efeito Atordoante ATTACK_SKILL|STANDING_SKILL daejin 18 4 Poder de Ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidade de Atordoamento %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Corpo Forte Corpo de Ferro Corpo de Aço Aumenta a Defesa e não cais ao chão. Aumenta a Defesa Reduz a Rapidez de Movimento Não cais ao chão STANDING_SKILL cheongeun 19 4 Defesa: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rapidez de Movimento: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Corpo Forte Corpo de Ferro Corpo de Aço Aumenta a Defesa e não cais ao chão. Aumenta a Defesa Reduz a Rapidez de Movimento Não cais ao chão STANDING_SKILL cheongeun 19 4 Defesa: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rapidez de Movimento: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Espada Rotativa Espada Dançante Ciclone Gira a espada para atacares vários inimigos. Ataque Residual Frontal Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Poder de Ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Espada Rotativa Espada Dançante Ciclone Gira a espada para atacares vários inimigos. Ataque Residual Frontal Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Poder de Ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Ataque de Espada Raio de Espada Tempestade de Espada Ataca inimigos directamente. Ataque de Longo Alcance Ataque a Múltiplos Alvos Probabilidade de Atordar Atira o alvo ao chão ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Poder de Ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidade de Atordoar %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Ataque de Espada Raio de Espada Tempestade de Espada Ataca inimigos directamente. Ataque de Longo Alcance Ataque a Múltiplos Alvos Probabilidade de Atordar Atira o alvo ao chão ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Poder de Ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidade de Atordoar %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Raiva Fúria Cólera Concentras-te apenas no ataque. Aumenta a Rapidez de Ataque Aumenta a Rapidez de Movimento Aumenta o Dano Recebido STANDING_SKILL jeongwi 3 4 Rapidez de Ataque +%.0f%% 50 * SkillPoint Rapidez de Movimento +%.0f%% 20 * SkillPoint
|
3 WARRIOR Raiva Fúria Cólera Concentras-te apenas no ataque. Aumenta a Rapidez de Ataque Aumenta a Rapidez de Movimento Aumenta o Dano Recebido STANDING_SKILL jeongwi 3 4 Rapidez de Ataque +%.0f%% 50 * SkillPoint Rapidez de Movimento +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Atacul Spiritului Unda de Soc Atac Tsunami Ataci duşmanii frontal. Atac de pătrundere frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Atac %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Atacul Spiritului Unda de Soc Atac Tsunami Ataci duşmanii frontal. Atac de pătrundere frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Atac %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Zdrobire Zdrobirea Tigrului Zdrobirea Dragonului Ataci dusmanii frontal. Atac de patrundere Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Atac %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Zdrobire Zdrobirea Tigrului Zdrobirea Dragonului Ataci dusmanii frontal. Atac de patrundere Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Atac %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Zdruncinare Zdruncinarea Leului Zdruncinarea Rinocerului Rasturnarea mai multor oponenti. Atac Direct Frontal Sansa de Confuzie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Putere Atac %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sansa Confuzie %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Zdruncinare Zdruncinarea Leului Zdruncinarea Rinocerului Rasturnarea mai multor oponenti. Atac Direct Frontal Sansa de Confuzie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Putere Atac %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sansa Confuzie %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Corp Rezistent Corp de Fier Corp de Otel Apărarea ta se îmbunătăţeşte pentru un timp iar tu nu cazi la pământ. Îmbunătăţirea apărării Scade viteza de mişcare Nu cazi la pământ STANDING_SKILL cheongeun 19 4 Apărare : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Viteză de mişcare: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Corp Rezistent Corp de Fier Corp de Otel Apărarea ta se îmbunătăţeşte pentru un timp iar tu nu cazi la pământ. Îmbunătăţirea apărării Scade viteza de mişcare Nu cazi la pământ STANDING_SKILL cheongeun 19 4 Apărare : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Viteză de mişcare: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Vartejul Sabiei Dansul Sabiei Ciclon Învârte sabia pentru a ataca mai mulţi duşmani. Atac pătrunzător Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Atac %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Vartejul Sabiei Dansul Sabiei Ciclon Învârte sabia pentru a ataca mai mulţi duşmani. Atac pătrunzător Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Atac %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Atacul Sabiei Fulgerul Sabiei Traznetul Sabiei Ataca inamicii direct. Atac de Raza Lunga Atac pe tinte multiple Efect de Confuzie Arunca oponentul la pamant ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Putere Atac %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sansa Confuzie %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Atacul Sabiei Fulgerul Sabiei Traznetul Sabiei Ataca inamicii direct. Atac de Raza Lunga Atac pe tinte multiple Efect de Confuzie Arunca oponentul la pamant ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Putere Atac %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sansa Confuzie %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Iures Furie Turbare Te concentrezi doar asupra atacului. Viteza de atac creşte Creşte viteza de mişcare Creşte expunerea la pagube STANDING_SKILL jeongwi 3 4 Viteza de atac +%.0f%% 50 * SkillPoint Viteza de mişcare +%.0f%% 20 * SkillPoint
|
3 WARRIOR Iures Furie Turbare Te concentrezi doar asupra atacului. Viteza de atac creşte Creşte viteza de mişcare Creşte expunerea la pagube STANDING_SKILL jeongwi 3 4 Viteza de atac +%.0f%% 50 * SkillPoint Viteza de mişcare +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Призрачный удар Силовая волна Цунами Прямая атака врагов. Зональная атака ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Сила атаки:%.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
16 WARRIOR Призрачный удар Силовая волна Цунами Прямая атака врагов. Зональная атака ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Сила атаки:%.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
|
||||||
17 WARRIOR Сильный удар Сильный удар тигра Сильный удар дракона Прямая атака врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Сила атаки: %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
17 WARRIOR Сильный удар Сильный удар тигра Сильный удар дракона Прямая атака врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Сила атаки: %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Удар ногой Львиный удар Удар носорога Сбивает с ног нескольких противников. Прямая зональная атака Шанс на головокружение ATTACK_SKILL|STANDING_SKILL daejin 18 4 Сила атаки %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Шанс на головокружение %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Удар ногой Львиный удар Удар носорога Сбивает с ног нескольких противников. Прямая зональная атака Шанс на головокружение ATTACK_SKILL|STANDING_SKILL daejin 18 4 Сила атаки %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Шанс на головокружение %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Сильное тело Железное тело Стальное тело Увеличение защиты Увеличение защиты Уменьшение скорости Вас невозможно сбить с ног STANDING_SKILL cheongeun 19 4 Защита: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Скорость передвижения: -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Сильное тело Железное тело Стальное тело Увеличение защиты Увеличение защиты Уменьшение скорости Вас невозможно сбить с ног STANDING_SKILL cheongeun 19 4 Защита: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Скорость передвижения: -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Вращающийся меч Танцующий меч Циклон Атака нескольких врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Сила атаки: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Вращающийся меч Танцующий меч Циклон Атака нескольких врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Сила атаки: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Взмах мечом Удар мечом Мастерский удар мечом Фронтальная атака. Дальняя атака Атака нескольких целей Головокружение Сбивает противника с ног ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Сила атаки %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Шанс на головокружение %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Взмах мечом Удар мечом Мастерский удар мечом Фронтальная атака. Дальняя атака Атака нескольких целей Головокружение Сбивает противника с ног ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Сила атаки %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Шанс на головокружение %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Берсерк Ярость Безумие Концентрация на атаке. Увеличение скорости атаки Увеличение скорости передвижения Увеличение получаемых повреждений STANDING_SKILL jeongwi 3 4 Скорость атаки: +%.0f%% 50 * SkillPoint Скорость передвижения: +%.0f%% 20 * SkillPoint
|
3 WARRIOR Берсерк Ярость Безумие Концентрация на атаке. Увеличение скорости атаки Увеличение скорости передвижения Увеличение получаемых повреждений STANDING_SKILL jeongwi 3 4 Скорость атаки: +%.0f%% 50 * SkillPoint Скорость передвижения: +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
16 WARRIOR Ruh Vuruşu Şok Dalgası Tsunami-saldırısı Düşmana doğrudan saldırı. Önden Sıçrama Saldırısı ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*GÜÇ + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*GÜÇ + CON)*SkillPoint
|
16 WARRIOR Ruh Vuruşu Şok Dalgası Tsunami-saldırısı Düşmana doğrudan saldırı. Önden Sıçrama Saldırısı ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*GÜÇ + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*GÜÇ + CON)*SkillPoint
|
||||||
17 WARRIOR Şiddetli Vuruş Kaplan vuruşu Ejderha Vuruşu Düşmana doğrudan saldırı. Güçlü Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*GÜÇ + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*GÜÇ + 3*CON)*SkillPoint
|
17 WARRIOR Şiddetli Vuruş Kaplan vuruşu Ejderha Vuruşu Düşmana doğrudan saldırı. Güçlü Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*GÜÇ + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*GÜÇ + 3*CON)*SkillPoint
|
||||||
18 WARRIOR Güçlü Vuruş Aslan Vuruşu Rhino Vuruşu Birden çok düşmanı uzaklaştıran vuruş. Güçlü Sıçrama Saldırısı Bayılma olasılığı ATTACK_SKILL|STANDING_SKILL daejin 18 4 Saldırı Gücü %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Bayılma şansı: %.0f%% (100 + 1000*SkillPoint/6)/10
|
18 WARRIOR Güçlü Vuruş Aslan Vuruşu Rhino Vuruşu Birden çok düşmanı uzaklaştıran vuruş. Güçlü Sıçrama Saldırısı Bayılma olasılığı ATTACK_SKILL|STANDING_SKILL daejin 18 4 Saldırı Gücü %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Bayılma şansı: %.0f%% (100 + 1000*SkillPoint/6)/10
|
||||||
19 WARRIOR Güçlü Beden Demir Beden Çelik Beden Savunmayı arttırır ve kazanırsınız. Savunmayı arttırır Hareket Hızını Düşürür Asla düşmez. STANDING_SKILL cheongeun 19 4 Savunma : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Hareket Hızı : -%.0f 1 + 9*SkillPoint
|
19 WARRIOR Güçlü Beden Demir Beden Çelik Beden Savunmayı arttırır ve kazanırsınız. Savunmayı arttırır Hareket Hızını Düşürür Asla düşmez. STANDING_SKILL cheongeun 19 4 Savunma : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Hareket Hızı : -%.0f -(0.375*SkillPoint)
|
||||||
2 WARRIOR Kılıç Çevirme Kılıç Dansı Siklon Kılıcı çevirerek birden çok düşmana saldırma. Önden Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Saldırı gücü %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
2 WARRIOR Kılıç Çevirme Kılıç Dansı Siklon Kılıcı çevirerek birden çok düşmana saldırma. Önden Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Saldırı gücü %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
|
||||||
20 WARRIOR Kılıç Darbesi Kılıç Yıldırımı Kılıç Fırlatmak Düşmana Doğrudan Saldırı. Uzun Menzilli Saldırı Çoklu Hedefe Saldırı Bayılma Hedefi indirir ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Saldırı Gücü %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Bayılma şansı: %.0f%% (100+k*1000/6)/10
|
20 WARRIOR Kılıç Darbesi Kılıç Yıldırımı Kılıç Fırlatmak Düşmana Doğrudan Saldırı. Uzun Menzilli Saldırı Çoklu Hedefe Saldırı Bayılma Hedefi indirir ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Saldırı Gücü %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Bayılma şansı: %.0f%% (100+k*1000/6)/10
|
||||||
3 WARRIOR Öfke Korkunç Öfke Çılgınlık Sadece Saldırıya konsantre olmak. Saldırı Hızını Arttırır Hareket Hızını Arttırır Alınan zararı artırır STANDING_SKILL jeongwi 3 4 Saldırı Hızı +%.0f%% 50 * SkillPoint Hareket Hızı +%.0f%% 20 * SkillPoint
|
3 WARRIOR Öfke Korkunç Öfke Çılgınlık Sadece Saldırıya konsantre olmak. Saldırı Hızını Arttırır Hareket Hızını Arttırır Alınan zararı artırır STANDING_SKILL jeongwi 3 4 Saldırı Hızı +%.0f%% 50 * SkillPoint Hareket Hızı +%.0f%% 20 * SkillPoint
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
self.playerGauge = uiPlayerGauge.PlayerGauge(self)
|
self.playerGauge = uiPlayerGauge.PlayerGauge(self)
|
||||||
self.playerGauge.Hide()
|
self.playerGauge.Hide()
|
||||||
|
|
||||||
#wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴.
|
#wj 2014.1.2. ESCŰ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>켱<EFBFBD><ECBCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DropQuestionDialog<6F><67> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> itemDropQuestionDialog<6F><67> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾ<EFBFBD> ERROR<4F><52> <20><EFBFBD><DFBB>Ͽ<EFBFBD> init<69><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD> <20>ʱ<EFBFBD>ȭ <20><>Ŵ.
|
||||||
self.itemDropQuestionDialog = None
|
self.itemDropQuestionDialog = None
|
||||||
|
|
||||||
self.__SetQuickSlotMode()
|
self.__SetQuickSlotMode()
|
||||||
@@ -226,7 +226,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
exception.Abort("GameWindow.Open")
|
exception.Abort("GameWindow.Open")
|
||||||
# END_OF_START_GAME_ERROR_EXIT
|
# END_OF_START_GAME_ERROR_EXIT
|
||||||
|
|
||||||
# NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱
|
# NPC<EFBFBD><EFBFBD> ť<><C5A5>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3>
|
||||||
# ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ]
|
# ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ]
|
||||||
self.cubeInformation = {}
|
self.cubeInformation = {}
|
||||||
self.currentCubeNPC = 0
|
self.currentCubeNPC = 0
|
||||||
@@ -314,10 +314,10 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
def __BuildKeyDict(self):
|
def __BuildKeyDict(self):
|
||||||
onPressKeyDict = {}
|
onPressKeyDict = {}
|
||||||
|
|
||||||
##PressKey 는 누르고 있는 동안 계속 적용되는 키이다.
|
##PressKey <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>Ǵ<EFBFBD> Ű<>̴<EFBFBD>.
|
||||||
|
|
||||||
## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약)
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ű <20><><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD> <20>̿<EFBFBD>ȴ<EFBFBD>.(<28><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ鵵 <20><> <20><><EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||||
## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다.
|
## F12 <EFBFBD><EFBFBD> Ŭ<><C5AC> <20><><EFBFBD><EFBFBD><EFBFBD> Ű<>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
||||||
onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1)
|
onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1)
|
||||||
onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2)
|
onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2)
|
||||||
onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3)
|
onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3)
|
||||||
@@ -337,7 +337,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen()
|
onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen()
|
||||||
onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack()
|
onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack()
|
||||||
|
|
||||||
#캐릭터 이동키
|
#ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>Ű
|
||||||
onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp()
|
onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp()
|
||||||
onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown()
|
onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown()
|
||||||
onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft()
|
onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft()
|
||||||
@@ -564,12 +564,12 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT)
|
self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT)
|
||||||
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
|
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
|
||||||
|
|
||||||
# 오브젝트 그리는 개수
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
self.ObjectNum = ui.TextLine()
|
self.ObjectNum = ui.TextLine()
|
||||||
self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT)
|
self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT)
|
||||||
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120)
|
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120)
|
||||||
|
|
||||||
# 시야거리
|
# <EFBFBD>þ߰Ÿ<EFBFBD>
|
||||||
self.ViewDistance = ui.TextLine()
|
self.ViewDistance = ui.TextLine()
|
||||||
self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT)
|
self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT)
|
||||||
self.ViewDistance.SetPosition(0, 0)
|
self.ViewDistance.SetPosition(0, 0)
|
||||||
@@ -1016,6 +1016,9 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
|
messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
|
||||||
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
|
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
|
||||||
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
|
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
|
||||||
|
|
||||||
|
messengerAddFriendQuestion.OnPressEscapeKey = ui.__mem_func__(self.OnDenyAddFriend) # ESC <20><> deny
|
||||||
|
|
||||||
messengerAddFriendQuestion.Open()
|
messengerAddFriendQuestion.Open()
|
||||||
messengerAddFriendQuestion.name = name
|
messengerAddFriendQuestion.name = name
|
||||||
self.messengerAddFriendQuestion = messengerAddFriendQuestion
|
self.messengerAddFriendQuestion = messengerAddFriendQuestion
|
||||||
@@ -1309,7 +1312,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
self.__DropMoney(attachedType, attachedMoney)
|
self.__DropMoney(attachedType, attachedMoney)
|
||||||
|
|
||||||
def __DropMoney(self, attachedType, attachedMoney):
|
def __DropMoney(self, attachedType, attachedMoney):
|
||||||
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지
|
# PRIVATESHOP_DISABLE_ITEM_DROP - <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
|
||||||
return
|
return
|
||||||
@@ -1331,7 +1334,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
self.itemDropQuestionDialog = itemDropQuestionDialog
|
self.itemDropQuestionDialog = itemDropQuestionDialog
|
||||||
|
|
||||||
def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
|
def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
|
||||||
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지
|
# PRIVATESHOP_DISABLE_ITEM_DROP - <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
|
||||||
return
|
return
|
||||||
@@ -1463,7 +1466,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def UpdateDebugInfo(self):
|
def UpdateDebugInfo(self):
|
||||||
#
|
#
|
||||||
# 캐릭터 좌표 및 FPS 출력
|
# ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ <20><> FPS <EFBFBD><EFBFBD><EFBFBD>
|
||||||
(x, y, z) = player.GetMainCharacterPosition()
|
(x, y, z) = player.GetMainCharacterPosition()
|
||||||
nUpdateTime = app.GetUpdateTime()
|
nUpdateTime = app.GetUpdateTime()
|
||||||
nUpdateFPS = app.GetUpdateFPS()
|
nUpdateFPS = app.GetUpdateFPS()
|
||||||
@@ -1626,22 +1629,22 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
def BINARY_Cube_Close(self):
|
def BINARY_Cube_Close(self):
|
||||||
self.interface.CloseCubeWindow()
|
self.interface.CloseCubeWindow()
|
||||||
|
|
||||||
# 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update
|
# <EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>ϼ<EFBFBD>ǰ<EFBFBD><C7B0> VNUM<55><4D> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> update
|
||||||
def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
|
def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
|
||||||
self.interface.UpdateCubeInfo(gold, itemVnum, count)
|
self.interface.UpdateCubeInfo(gold, itemVnum, count)
|
||||||
|
|
||||||
def BINARY_Cube_Succeed(self, itemVnum, count):
|
def BINARY_Cube_Succeed(self, itemVnum, count):
|
||||||
print "큐브 제작 성공"
|
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||||
self.interface.SucceedCubeWork(itemVnum, count)
|
self.interface.SucceedCubeWork(itemVnum, count)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def BINARY_Cube_Failed(self):
|
def BINARY_Cube_Failed(self):
|
||||||
print "큐브 제작 실패"
|
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||||
self.interface.FailedCubeWork()
|
self.interface.FailedCubeWork()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def BINARY_Cube_ResultList(self, npcVNUM, listText):
|
def BINARY_Cube_ResultList(self, npcVNUM, listText):
|
||||||
# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌
|
# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "/" <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD>е<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>
|
||||||
#print listText
|
#print listText
|
||||||
|
|
||||||
if npcVNUM == 0:
|
if npcVNUM == 0:
|
||||||
@@ -1742,7 +1745,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
# END_OF_CUBE
|
# END_OF_CUBE
|
||||||
|
|
||||||
# 용혼석
|
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||||
def BINARY_Highlight_Item(self, inven_type, inven_pos):
|
def BINARY_Highlight_Item(self, inven_type, inven_pos):
|
||||||
self.interface.Highligt_Item(inven_type, inven_pos)
|
self.interface.Highligt_Item(inven_type, inven_pos)
|
||||||
|
|
||||||
@@ -2180,4 +2183,6 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
# END_OF_WEDDING
|
# END_OF_WEDDING
|
||||||
|
|
||||||
|
def SkillClearCoolTime(self, slotIndex):
|
||||||
|
self.interface.SkillClearCoolTime(slotIndex)
|
||||||
|
|
||||||
|
|||||||
@@ -305,10 +305,14 @@ class Interface(object):
|
|||||||
self.whisperDialogDict = {}
|
self.whisperDialogDict = {}
|
||||||
self.privateShopAdvertisementBoardDict = {}
|
self.privateShopAdvertisementBoardDict = {}
|
||||||
|
|
||||||
|
self.wndMessenger.InitializeHandler()
|
||||||
|
|
||||||
self.wndInventory.SetItemToolTip(self.tooltipItem)
|
self.wndInventory.SetItemToolTip(self.tooltipItem)
|
||||||
|
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
|
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
|
||||||
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
|
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
|
||||||
|
|
||||||
self.wndSafebox.SetItemToolTip(self.tooltipItem)
|
self.wndSafebox.SetItemToolTip(self.tooltipItem)
|
||||||
self.wndCube.SetItemToolTip(self.tooltipItem)
|
self.wndCube.SetItemToolTip(self.tooltipItem)
|
||||||
self.wndCubeResult.SetItemToolTip(self.tooltipItem)
|
self.wndCubeResult.SetItemToolTip(self.tooltipItem)
|
||||||
@@ -535,6 +539,10 @@ class Interface(object):
|
|||||||
def OnChangeCurrentSkill(self, skillSlotNumber):
|
def OnChangeCurrentSkill(self, skillSlotNumber):
|
||||||
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
|
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
|
||||||
|
|
||||||
|
def SkillClearCoolTime(self, slotIndex):
|
||||||
|
self.wndCharacter.SkillClearCoolTime(slotIndex)
|
||||||
|
self.wndTaskBar.SkillClearCoolTime(slotIndex)
|
||||||
|
|
||||||
def SelectMouseButtonEvent(self, dir, event):
|
def SelectMouseButtonEvent(self, dir, event):
|
||||||
self.wndTaskBar.SelectMouseButtonEvent(dir, event)
|
self.wndTaskBar.SelectMouseButtonEvent(dir, event)
|
||||||
|
|
||||||
@@ -564,7 +572,7 @@ class Interface(object):
|
|||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
self.wndDragonSoul.RefreshItemSlot()
|
self.wndDragonSoul.RefreshItemSlot()
|
||||||
|
|
||||||
def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
|
def RefreshCharacter(self): ## Character <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, Inventory <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> Refresh
|
||||||
self.wndCharacter.RefreshCharacter()
|
self.wndCharacter.RefreshCharacter()
|
||||||
self.wndTaskBar.RefreshQuickSlot()
|
self.wndTaskBar.RefreshQuickSlot()
|
||||||
|
|
||||||
@@ -696,7 +704,7 @@ class Interface(object):
|
|||||||
def RemovePartyMember(self, pid):
|
def RemovePartyMember(self, pid):
|
||||||
self.wndParty.RemovePartyMember(pid)
|
self.wndParty.RemovePartyMember(pid)
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
self.__ArrangeQuestButton()
|
self.__ArrangeQuestButton()
|
||||||
|
|
||||||
def LinkPartyMember(self, pid, vid):
|
def LinkPartyMember(self, pid, vid):
|
||||||
@@ -711,7 +719,7 @@ class Interface(object):
|
|||||||
def ExitParty(self):
|
def ExitParty(self):
|
||||||
self.wndParty.ExitParty()
|
self.wndParty.ExitParty()
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
self.__ArrangeQuestButton()
|
self.__ArrangeQuestButton()
|
||||||
|
|
||||||
def PartyHealReady(self):
|
def PartyHealReady(self):
|
||||||
@@ -874,7 +882,7 @@ class Interface(object):
|
|||||||
if True == self.wndChat.IsEditMode():
|
if True == self.wndChat.IsEditMode():
|
||||||
self.wndChat.CloseChat()
|
self.wndChat.CloseChat()
|
||||||
else:
|
else:
|
||||||
# 웹페이지가 열렸을때는 채팅 입력이 안됨
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ȵ<EFBFBD>
|
||||||
if self.wndWeb and self.wndWeb.IsShow():
|
if self.wndWeb and self.wndWeb.IsShow():
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@@ -975,7 +983,7 @@ class Interface(object):
|
|||||||
else:
|
else:
|
||||||
self.wndExpandedTaskBar.Close()
|
self.wndExpandedTaskBar.Close()
|
||||||
|
|
||||||
# 용혼석
|
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||||
def DragonSoulActivate(self, deck):
|
def DragonSoulActivate(self, deck):
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
|
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
|
||||||
@@ -1046,7 +1054,7 @@ class Interface(object):
|
|||||||
if True == self.wndDragonSoulRefine.IsShow():
|
if True == self.wndDragonSoulRefine.IsShow():
|
||||||
self.wndDragonSoulRefine.Close()
|
self.wndDragonSoulRefine.Close()
|
||||||
|
|
||||||
# 용혼석 끝
|
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>
|
||||||
|
|
||||||
def ToggleGuildWindow(self):
|
def ToggleGuildWindow(self):
|
||||||
if not self.wndGuild.IsShow():
|
if not self.wndGuild.IsShow():
|
||||||
@@ -1096,7 +1104,7 @@ class Interface(object):
|
|||||||
def OpenWebWindow(self, url):
|
def OpenWebWindow(self, url):
|
||||||
self.wndWeb.Open(url)
|
self.wndWeb.Open(url)
|
||||||
|
|
||||||
# 웹페이지를 열면 채팅을 닫는다
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ݴ´<DDB4>
|
||||||
self.wndChat.CloseChat()
|
self.wndChat.CloseChat()
|
||||||
|
|
||||||
# show GIFT
|
# show GIFT
|
||||||
@@ -1124,9 +1132,9 @@ class Interface(object):
|
|||||||
def SucceedCubeWork(self, itemVnum, count):
|
def SucceedCubeWork(self, itemVnum, count):
|
||||||
self.wndCube.Clear()
|
self.wndCube.Clear()
|
||||||
|
|
||||||
print "큐브 제작 성공! [%d:%d]" % (itemVnum, count)
|
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! [%d:%d]" % (itemVnum, count)
|
||||||
|
|
||||||
if 0: # 결과 메시지 출력은 생략 한다
|
if 0: # <EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>
|
||||||
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
|
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
|
||||||
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
|
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
|
||||||
self.wndCubeResult.Open()
|
self.wndCubeResult.Open()
|
||||||
@@ -1289,7 +1297,7 @@ class Interface(object):
|
|||||||
btn = uiWhisper.WhisperButton()
|
btn = uiWhisper.WhisperButton()
|
||||||
|
|
||||||
# QUEST_LETTER_IMAGE
|
# QUEST_LETTER_IMAGE
|
||||||
##!! 20061026.levites.퀘스트_이미지_교체
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>ü
|
||||||
import item
|
import item
|
||||||
if "item"==iconType:
|
if "item"==iconType:
|
||||||
item.SelectItem(int(iconName))
|
item.SelectItem(int(iconName))
|
||||||
@@ -1336,7 +1344,7 @@ class Interface(object):
|
|||||||
screenWidth = wndMgr.GetScreenWidth()
|
screenWidth = wndMgr.GetScreenWidth()
|
||||||
screenHeight = wndMgr.GetScreenHeight()
|
screenHeight = wndMgr.GetScreenHeight()
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if self.wndParty.IsShow():
|
if self.wndParty.IsShow():
|
||||||
xPos = 100 + 30
|
xPos = 100 + 30
|
||||||
else:
|
else:
|
||||||
@@ -1390,8 +1398,8 @@ class Interface(object):
|
|||||||
def __InitWhisper(self):
|
def __InitWhisper(self):
|
||||||
chat.InitWhisper(self)
|
chat.InitWhisper(self)
|
||||||
|
|
||||||
## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
|
## ä<EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> "<22><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||||
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
|
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||||
def OpenWhisperDialogWithoutTarget(self):
|
def OpenWhisperDialogWithoutTarget(self):
|
||||||
if not self.dlgWhisperWithoutTarget:
|
if not self.dlgWhisperWithoutTarget:
|
||||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||||
@@ -1408,7 +1416,7 @@ class Interface(object):
|
|||||||
self.dlgWhisperWithoutTarget.SetTop()
|
self.dlgWhisperWithoutTarget.SetTop()
|
||||||
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
|
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
|
||||||
|
|
||||||
## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수
|
## <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict<EFBFBD><EFBFBD> â<><C3A2> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
def RegisterTemporaryWhisperDialog(self, name):
|
def RegisterTemporaryWhisperDialog(self, name):
|
||||||
if not self.dlgWhisperWithoutTarget:
|
if not self.dlgWhisperWithoutTarget:
|
||||||
return
|
return
|
||||||
@@ -1427,7 +1435,7 @@ class Interface(object):
|
|||||||
self.dlgWhisperWithoutTarget = None
|
self.dlgWhisperWithoutTarget = None
|
||||||
self.__CheckGameMaster(name)
|
self.__CheckGameMaster(name)
|
||||||
|
|
||||||
## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수
|
## ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> 1:1 <20><>ȭ <20>ϱ⸦ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||||
def OpenWhisperDialog(self, name):
|
def OpenWhisperDialog(self, name):
|
||||||
if not self.whisperDialogDict.has_key(name):
|
if not self.whisperDialogDict.has_key(name):
|
||||||
dlg = self.__MakeWhisperDialog(name)
|
dlg = self.__MakeWhisperDialog(name)
|
||||||
@@ -1440,7 +1448,7 @@ class Interface(object):
|
|||||||
if 0 != btn:
|
if 0 != btn:
|
||||||
self.__DestroyWhisperButton(btn)
|
self.__DestroyWhisperButton(btn)
|
||||||
|
|
||||||
## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수
|
## <EFBFBD>ٸ<EFBFBD> ij<><C4B3><EFBFBD>ͷκ<CDB7><CEBA><EFBFBD> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD> <20>δ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
def RecvWhisper(self, name):
|
def RecvWhisper(self, name):
|
||||||
if not self.whisperDialogDict.has_key(name):
|
if not self.whisperDialogDict.has_key(name):
|
||||||
btn = self.__FindWhisperButton(name)
|
btn = self.__FindWhisperButton(name)
|
||||||
@@ -1459,7 +1467,7 @@ class Interface(object):
|
|||||||
def MakeWhisperButton(self, name):
|
def MakeWhisperButton(self, name):
|
||||||
self.__MakeWhisperButton(name)
|
self.__MakeWhisperButton(name)
|
||||||
|
|
||||||
## 버튼을 눌렀을때 창을 여는 함수
|
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||||
def ShowWhisperDialog(self, btn):
|
def ShowWhisperDialog(self, btn):
|
||||||
try:
|
try:
|
||||||
self.__MakeWhisperDialog(btn.name)
|
self.__MakeWhisperDialog(btn.name)
|
||||||
@@ -1471,11 +1479,11 @@ class Interface(object):
|
|||||||
import dbg
|
import dbg
|
||||||
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
|
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
|
||||||
|
|
||||||
## 버튼 초기화
|
## <EFBFBD><EFBFBD>ư <20>ʱ<EFBFBD>ȭ
|
||||||
self.__DestroyWhisperButton(btn)
|
self.__DestroyWhisperButton(btn)
|
||||||
|
|
||||||
## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수
|
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
## 창을 최소화 합니다.
|
## â<EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20>մϴ<D5B4>.
|
||||||
def MinimizeWhisperDialog(self, name):
|
def MinimizeWhisperDialog(self, name):
|
||||||
|
|
||||||
if 0 != name:
|
if 0 != name:
|
||||||
@@ -1483,8 +1491,8 @@ class Interface(object):
|
|||||||
|
|
||||||
self.CloseWhisperDialog(name)
|
self.CloseWhisperDialog(name)
|
||||||
|
|
||||||
## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수
|
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
## 창을 지웁니다.
|
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||||
def CloseWhisperDialog(self, name):
|
def CloseWhisperDialog(self, name):
|
||||||
|
|
||||||
if 0 == name:
|
if 0 == name:
|
||||||
@@ -1503,7 +1511,7 @@ class Interface(object):
|
|||||||
import dbg
|
import dbg
|
||||||
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
|
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
|
||||||
|
|
||||||
## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수
|
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
def __ArrangeWhisperButton(self):
|
def __ArrangeWhisperButton(self):
|
||||||
|
|
||||||
screenWidth = wndMgr.GetScreenWidth()
|
screenWidth = wndMgr.GetScreenWidth()
|
||||||
@@ -1520,9 +1528,9 @@ class Interface(object):
|
|||||||
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
|
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
|
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Whisper <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며
|
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
|
## <EFBFBD>̷<EFBFBD> <20><><EFBFBD><EFBFBD> ToolTip<69><70><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><>ư<EFBFBD>鿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||||
def __FindWhisperButton(self, name):
|
def __FindWhisperButton(self, name):
|
||||||
for button in self.whisperButtonList:
|
for button in self.whisperButtonList:
|
||||||
if button.name == name:
|
if button.name == name:
|
||||||
@@ -1530,7 +1538,7 @@ class Interface(object):
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
## 창을 만듭니다.
|
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||||
def __MakeWhisperDialog(self, name):
|
def __MakeWhisperDialog(self, name):
|
||||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||||
dlgWhisper.BindInterface(self)
|
dlgWhisper.BindInterface(self)
|
||||||
@@ -1542,7 +1550,7 @@ class Interface(object):
|
|||||||
|
|
||||||
return dlgWhisper
|
return dlgWhisper
|
||||||
|
|
||||||
## 버튼을 만듭니다.
|
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||||
def __MakeWhisperButton(self, name):
|
def __MakeWhisperButton(self, name):
|
||||||
whisperButton = uiWhisper.WhisperButton()
|
whisperButton = uiWhisper.WhisperButton()
|
||||||
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
|
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
|
||||||
|
|||||||
@@ -105,30 +105,40 @@ def DefineSkillIndexDict():
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def RegisterSkill(race, group, empire=0):
|
def RegisterSkill(race, group, empire = 0):
|
||||||
|
|
||||||
DefineSkillIndexDict()
|
DefineSkillIndexDict()
|
||||||
|
|
||||||
job = chr.RaceToJob(race)
|
job = chr.RaceToJob(race)
|
||||||
|
|
||||||
|
# Ensure group 0 exists (horse-only) when cooldown fix is on
|
||||||
|
if not SKILL_INDEX_DICT[job].has_key(0):
|
||||||
|
# Assassin has 140 as well; others only 137-139
|
||||||
|
SKILL_INDEX_DICT[job][0] = (0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
137, 0, 138, 0, 139, 0) + ((140,) if job == JOB_ASSASSIN else ())
|
||||||
|
|
||||||
|
## Support Skills (Always register regardless of skill group)
|
||||||
|
if SKILL_INDEX_DICT.has_key(job):
|
||||||
|
supportSkillList = SKILL_INDEX_DICT[job].get("SUPPORT", ())
|
||||||
|
|
||||||
|
for i in xrange(len(supportSkillList)):
|
||||||
|
player.SetSkill(i + 100 + 1, supportSkillList[i])
|
||||||
|
|
||||||
## Character Skill
|
## Character Skill
|
||||||
if SKILL_INDEX_DICT.has_key(job):
|
if SKILL_INDEX_DICT.has_key(job):
|
||||||
|
|
||||||
if SKILL_INDEX_DICT[job].has_key(group):
|
if SKILL_INDEX_DICT[job].has_key(group):
|
||||||
|
|
||||||
activeSkillList = SKILL_INDEX_DICT[job][group]
|
activeSkillList = SKILL_INDEX_DICT[job][group]
|
||||||
|
|
||||||
for i in xrange(len(activeSkillList)):
|
for i in xrange(len(activeSkillList)):
|
||||||
skillIndex = activeSkillList[i]
|
skillIndex = activeSkillList[i]
|
||||||
|
|
||||||
## 7번 8번 스킬은 여기서 설정하면 안됨
|
## 7<EFBFBD><EFBFBD> 8<><38> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ<EFBFBD>
|
||||||
if i != 6 and i != 7:
|
if i != 6 and i != 7:
|
||||||
player.SetSkill(i+1, skillIndex)
|
player.SetSkill(i + 1, skillIndex)
|
||||||
|
|
||||||
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
|
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
|
||||||
|
|
||||||
for i in xrange(len(supportSkillList)):
|
for i in xrange(len(supportSkillList)):
|
||||||
player.SetSkill(i+100+1, supportSkillList[i])
|
player.SetSkill(i + 100 + 1, supportSkillList[i])
|
||||||
|
|
||||||
## Language Skill
|
## Language Skill
|
||||||
if 0 != empire:
|
if 0 != empire:
|
||||||
@@ -211,20 +221,20 @@ def __InitData():
|
|||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse")
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse")
|
||||||
|
|
||||||
#자동물약 HP, SP
|
#<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP, SP
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse")
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse")
|
||||||
|
|
||||||
#라마단 초승달의 반지(71135) 착용순간 발동 이펙트
|
#<EFBFBD><EFBFBD> <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD>(71135) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse")
|
||||||
|
|
||||||
#할로윈 사탕 착용순간 발동 이펙트
|
#<EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse")
|
||||||
|
|
||||||
#행복의 반지 착용순간 발동 이펙트
|
#<EFBFBD>ູ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse")
|
||||||
|
|
||||||
#사랑의 팬던트 착용순간 발동 이펙트
|
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse")
|
||||||
|
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse")
|
||||||
@@ -251,8 +261,8 @@ def __InitData():
|
|||||||
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "", "season1/effect/success.mse")
|
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "", "season1/effect/success.mse")
|
||||||
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "", "season1/effect/fail.mse")
|
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "", "season1/effect/fail.mse")
|
||||||
|
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #레벨업 14일때 ( 독일전용 )
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#레벨업 15일때 ( 독일전용 )
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 15<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||||
|
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse")
|
||||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse")
|
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse")
|
||||||
@@ -361,28 +371,28 @@ def __LoadGameEffect():
|
|||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+0, "Bip01", localeInfo.FN_GM_MARK)
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+0, "Bip01", localeInfo.FN_GM_MARK)
|
||||||
# END_OF_LOCALE
|
# END_OF_LOCALE
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## 중독
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## <EFBFBD>ߵ<EFBFBD>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+4, "", "d:/ymir work/effect/affect/slow.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+4, "", "d:/ymir work/effect/affect/slow.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+6, "", "d:/ymir work/effect/etc/ready/ready.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+6, "", "d:/ymir work/effect/etc/ready/ready.mse")
|
||||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse")
|
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse")
|
||||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse")
|
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse")
|
||||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse")
|
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## 천근추 (밑에도 있따-_-)
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ؿ<EFBFBD><D8BF><EFBFBD> <20>ֵ<EFBFBD>-_-)
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## 자객 - 경공
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## <EFBFBD>ڰ<EFBFBD> - <20><><EFBFBD>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## 수라 - 공포
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## 수라 - 주마갑
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ָ<EFBFBD><D6B8><EFBFBD>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## 무당 - 호신
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ȣ<><C8A3>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## 무당 - 보호
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȣ
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## 무당 - 쾌속
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## 천근추 (Fallen)
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Fallen)
|
||||||
## 34 Polymoph
|
## 34 Polymoph
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse")
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse")
|
||||||
@@ -416,53 +426,53 @@ def __LoadGameEffect():
|
|||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse")
|
||||||
|
|
||||||
## FlyData
|
## FlyData
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf") ## 노란색 (EXP)
|
effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (EXP)
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf") ## 빨간색 (HP) 작은거
|
effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf") ## 빨간색 (HP) 큰거
|
effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) ū<EFBFBD><EFBFBD>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf") ## 파란색 꼬리만 있는거
|
effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf") ## 파란색 작은거
|
effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf") ## 파란색 큰거
|
effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> ū<><C5AB>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf") ## 폭죽 1
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf") ## 폭죽 2
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf") ## 폭죽 3
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf") ## 폭죽 4
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf") ## 폭죽 5
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf") ## 폭죽 6
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## 폭죽 X-Mas
|
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> X-Mas
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf") ## 폭뢰격
|
effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf") ## <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf") ## 빨간색 매우 작은거
|
effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf") ## 무영진
|
effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
## Emoticon
|
## Emoticon
|
||||||
EmoticonStr = "d:/ymir work/effect/etc/emoticon/"
|
EmoticonStr = "d:/ymir work/effect/etc/emoticon/"
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+0, "", EmoticonStr+"sweat.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+0, "", EmoticonStr+"sweat.mse")
|
||||||
net.RegisterEmoticonString("(황당)")
|
net.RegisterEmoticonString("(Ȳ<EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+1, "", EmoticonStr+"money.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+1, "", EmoticonStr+"money.mse")
|
||||||
net.RegisterEmoticonString("(돈)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+2, "", EmoticonStr+"happy.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+2, "", EmoticonStr+"happy.mse")
|
||||||
net.RegisterEmoticonString("(기쁨)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+3, "", EmoticonStr+"love_s.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+3, "", EmoticonStr+"love_s.mse")
|
||||||
net.RegisterEmoticonString("(좋아)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+4, "", EmoticonStr+"love_l.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+4, "", EmoticonStr+"love_l.mse")
|
||||||
net.RegisterEmoticonString("(사랑)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+5, "", EmoticonStr+"angry.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+5, "", EmoticonStr+"angry.mse")
|
||||||
net.RegisterEmoticonString("(분노)")
|
net.RegisterEmoticonString("(<EFBFBD>г<EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+6, "", EmoticonStr+"aha.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+6, "", EmoticonStr+"aha.mse")
|
||||||
net.RegisterEmoticonString("(아하)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+7, "", EmoticonStr+"gloom.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+7, "", EmoticonStr+"gloom.mse")
|
||||||
net.RegisterEmoticonString("(우울)")
|
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+8, "", EmoticonStr+"sorry.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+8, "", EmoticonStr+"sorry.mse")
|
||||||
net.RegisterEmoticonString("(죄송)")
|
net.RegisterEmoticonString("(<EFBFBD>˼<EFBFBD>)")
|
||||||
|
|
||||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+9, "", EmoticonStr+"!_mix_back.mse")
|
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+9, "", EmoticonStr+"!_mix_back.mse")
|
||||||
net.RegisterEmoticonString("(!)")
|
net.RegisterEmoticonString("(!)")
|
||||||
@@ -1128,7 +1138,7 @@ def __LoadGameShamanEx(race, path):
|
|||||||
#chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+10, "budong.msa")
|
#chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+10, "budong.msa")
|
||||||
|
|
||||||
START_INDEX = 0
|
START_INDEX = 0
|
||||||
#skill.SKILL_EFFECT_COUNT 까지//
|
#skill.SKILL_EFFECT_COUNT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
||||||
for i in (1, 2, 3):
|
for i in (1, 2, 3):
|
||||||
END_STRING = ""
|
END_STRING = ""
|
||||||
if i != 0: END_STRING = "_%d" % (i+1)
|
if i != 0: END_STRING = "_%d" % (i+1)
|
||||||
@@ -1335,7 +1345,7 @@ def LoadGuildBuildingList(filename):
|
|||||||
elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
|
elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
|
||||||
materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count
|
materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count
|
||||||
|
|
||||||
## GuildSymbol 은 일반 NPC 들과 함께 등록한다.
|
## GuildSymbol <EFBFBD><EFBFBD> <20>Ϲ<EFBFBD> NPC <20><><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||||
import chrmgr
|
import chrmgr
|
||||||
chrmgr.RegisterRaceSrcName(name, folderName)
|
chrmgr.RegisterRaceSrcName(name, folderName)
|
||||||
chrmgr.RegisterRaceName(vnum, name)
|
chrmgr.RegisterRaceName(vnum, name)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
SERVER_NAME = "Metin2"
|
SERVER_NAME = "Metin2"
|
||||||
SERVER_NAME_TEST = "Test"
|
SERVER_NAME_TEST = "Test"
|
||||||
SERVER_IP = "10.246.140.76"
|
SERVER_IP = "10.122.201.77"
|
||||||
SERVER_IP_TEST = "127.0.0.1"
|
SERVER_IP_TEST = "127.0.0.1"
|
||||||
CH1_NAME = "CH1"
|
CH1_NAME = "CH1"
|
||||||
CH2_NAME = "CH2"
|
CH2_NAME = "CH2"
|
||||||
|
|||||||
@@ -885,7 +885,7 @@ class ExpandedImageBox(ImageBox):
|
|||||||
def SetRenderingMode(self, mode):
|
def SetRenderingMode(self, mode):
|
||||||
wndMgr.SetRenderingMode(self.hWnd, mode)
|
wndMgr.SetRenderingMode(self.hWnd, mode)
|
||||||
|
|
||||||
# [0.0, 1.0] 사이의 값만큼 퍼센트로 그리지 않는다.
|
# [0.0, 1.0] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ <20>ۼ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><EFBFBD><D7B8><EFBFBD> <20>ʴ´<CAB4>.
|
||||||
def SetRenderingRect(self, left, top, right, bottom):
|
def SetRenderingRect(self, left, top, right, bottom):
|
||||||
wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
|
wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
|
||||||
|
|
||||||
@@ -1374,17 +1374,29 @@ class SlotWindow(Window):
|
|||||||
return wndMgr.GetSlotCount(self.hWnd)
|
return wndMgr.GetSlotCount(self.hWnd)
|
||||||
|
|
||||||
def SetUseMode(self, flag):
|
def SetUseMode(self, flag):
|
||||||
"True일때만 ItemToItem 이 가능한지 보여준다"
|
"True<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD> ItemToItem <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>"
|
||||||
wndMgr.SetUseMode(self.hWnd, flag)
|
wndMgr.SetUseMode(self.hWnd, flag)
|
||||||
|
|
||||||
def SetUsableItem(self, flag):
|
def SetUsableItem(self, flag):
|
||||||
"True면 현재 가리킨 아이템이 ItemToItem 적용 가능하다"
|
"True<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemToItem <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"
|
||||||
wndMgr.SetUsableItem(self.hWnd, flag)
|
wndMgr.SetUsableItem(self.hWnd, flag)
|
||||||
|
|
||||||
## Slot
|
## Slot
|
||||||
def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
|
def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
|
||||||
wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
|
wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
|
||||||
|
|
||||||
|
def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0):
|
||||||
|
wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime)
|
||||||
|
|
||||||
|
def RestoreSlotCoolTime(self, key):
|
||||||
|
wndMgr.RestoreSlotCoolTime(self.hWnd, key)
|
||||||
|
|
||||||
|
def TransferSlotCoolTime(self, slotIndex1, slotIndex2):
|
||||||
|
wndMgr.TransferSlotCoolTime(self.hWnd, slotIndex1, slotIndex2)
|
||||||
|
|
||||||
|
def ClearSlotCoolTime(self, slotIndex):
|
||||||
|
wndMgr.ClearSlotCoolTime(self.hWnd, slotIndex)
|
||||||
|
|
||||||
def DisableSlot(self, slotIndex):
|
def DisableSlot(self, slotIndex):
|
||||||
wndMgr.DisableSlot(self.hWnd, slotIndex)
|
wndMgr.DisableSlot(self.hWnd, slotIndex)
|
||||||
|
|
||||||
@@ -1536,7 +1548,7 @@ class TitleBar(Window):
|
|||||||
|
|
||||||
def MakeTitleBar(self, width, color):
|
def MakeTitleBar(self, width, color):
|
||||||
|
|
||||||
## 현재 Color는 사용하고 있지 않음
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Color<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
width = max(64, width)
|
width = max(64, width)
|
||||||
|
|
||||||
@@ -2767,8 +2779,8 @@ class PythonScriptLoader(object):
|
|||||||
print "===== Load Script File : %s" % (FileName)
|
print "===== Load Script File : %s" % (FileName)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# chr, player 등은 sandbox 내에서 import가 허용되지 않기 때문에,(봇이 악용할 여지가 매우 큼.)
|
# chr, player <EFBFBD><EFBFBD><EFBFBD><EFBFBD> sandbox <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> import<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,(<28><><EFBFBD><EFBFBD> <20>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> ŭ.)
|
||||||
# 미리 script dictionary에 필요한 상수를 넣어놓는다.
|
# <EFBFBD≯<EFBFBD> script dictionary<EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>´<EFBFBD>.
|
||||||
import chr
|
import chr
|
||||||
import player
|
import player
|
||||||
import app
|
import app
|
||||||
|
|||||||
@@ -50,7 +50,11 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
SUPPORT_PAGE_SLOT_COUNT = 12
|
SUPPORT_PAGE_SLOT_COUNT = 12
|
||||||
|
|
||||||
PAGE_SLOT_COUNT = 12
|
PAGE_SLOT_COUNT = 12
|
||||||
PAGE_HORSE = 2
|
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
PAGE_HORSE = 3
|
||||||
|
else:
|
||||||
|
PAGE_HORSE = 2
|
||||||
|
|
||||||
SKILL_GROUP_NAME_DICT = {
|
SKILL_GROUP_NAME_DICT = {
|
||||||
playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
|
playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
|
||||||
@@ -131,6 +135,10 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.supportSkillPointValue = None
|
self.supportSkillPointValue = None
|
||||||
self.skillGroupButton1 = None
|
self.skillGroupButton1 = None
|
||||||
self.skillGroupButton2 = None
|
self.skillGroupButton2 = None
|
||||||
|
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
self.skillGroupButton3 = None
|
||||||
|
|
||||||
self.activeSkillGroupName = None
|
self.activeSkillGroupName = None
|
||||||
|
|
||||||
self.guildNameSlot = None
|
self.guildNameSlot = None
|
||||||
@@ -178,6 +186,10 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
|
self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
|
||||||
self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
|
self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
|
||||||
self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
|
self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
|
||||||
|
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
self.skillGroupButton3 = self.GetChild("Skill_Group_Button_3")
|
||||||
|
|
||||||
self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
|
self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
|
||||||
|
|
||||||
self.tabDict = {
|
self.tabDict = {
|
||||||
@@ -237,11 +249,12 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.skillGroupButton = (
|
self.skillGroupButton = (
|
||||||
self.GetChild("Skill_Group_Button_1"),
|
self.GetChild("Skill_Group_Button_1"),
|
||||||
self.GetChild("Skill_Group_Button_2"),
|
self.GetChild("Skill_Group_Button_2"),
|
||||||
)
|
) + ((self.GetChild("Skill_Group_Button_3"),) if app.FIX_HORSE_SKILLS_TAB else ())
|
||||||
|
|
||||||
|
|
||||||
global SHOW_ONLY_ACTIVE_SKILL
|
global SHOW_ONLY_ACTIVE_SKILL
|
||||||
global HIDE_SUPPORT_SKILL_POINT
|
global HIDE_SUPPORT_SKILL_POINT
|
||||||
|
|
||||||
if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
|
if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
|
||||||
self.GetChild("Support_Skill_Point_Label").Hide()
|
self.GetChild("Support_Skill_Point_Label").Hide()
|
||||||
|
|
||||||
@@ -253,6 +266,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
||||||
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
||||||
self.questSlot = self.GetChild("Quest_Slot")
|
self.questSlot = self.GetChild("Quest_Slot")
|
||||||
|
|
||||||
for i in xrange(quest.QUEST_MAX_NUM):
|
for i in xrange(quest.QUEST_MAX_NUM):
|
||||||
self.questSlot.HideSlotBaseImage(i)
|
self.questSlot.HideSlotBaseImage(i)
|
||||||
self.questSlot.SetCoverButton(i,\
|
self.questSlot.SetCoverButton(i,\
|
||||||
@@ -264,6 +278,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.questNameList = []
|
self.questNameList = []
|
||||||
self.questLastTimeList = []
|
self.questLastTimeList = []
|
||||||
self.questLastCountList = []
|
self.questLastCountList = []
|
||||||
|
|
||||||
for i in xrange(quest.QUEST_MAX_NUM):
|
for i in xrange(quest.QUEST_MAX_NUM):
|
||||||
self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
|
self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
|
||||||
self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
|
self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
|
||||||
@@ -284,7 +299,6 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
|
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
|
||||||
|
|
||||||
def __SetEmotionSlot(self):
|
def __SetEmotionSlot(self):
|
||||||
|
|
||||||
self.emotionToolTip = uiToolTip.ToolTip()
|
self.emotionToolTip = uiToolTip.ToolTip()
|
||||||
|
|
||||||
for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
|
for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
|
||||||
@@ -302,6 +316,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
emotionIdx = slotIdx
|
emotionIdx = slotIdx
|
||||||
|
|
||||||
slot = self.soloEmotionSlot
|
slot = self.soloEmotionSlot
|
||||||
|
|
||||||
if slotIdx > 50:
|
if slotIdx > 50:
|
||||||
slot = self.dualEmotionSlot
|
slot = self.dualEmotionSlot
|
||||||
|
|
||||||
@@ -314,16 +329,19 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
if app.IsPressed(app.DIK_LCONTROL):
|
if app.IsPressed(app.DIK_LCONTROL):
|
||||||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
|
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
|
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
|
||||||
|
|
||||||
def __ClickEmotionSlot(self, slotIndex):
|
def __ClickEmotionSlot(self, slotIndex):
|
||||||
print "click emotion"
|
print "click emotion"
|
||||||
|
|
||||||
if not slotIndex in emotion.EMOTION_DICT:
|
if not slotIndex in emotion.EMOTION_DICT:
|
||||||
return
|
return
|
||||||
|
|
||||||
print "check acting"
|
print "check acting"
|
||||||
|
|
||||||
if player.IsActingEmotion():
|
if player.IsActingEmotion():
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -336,6 +354,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
|
if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
|
||||||
import chat
|
import chat
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
command += " " + chr.GetNameByVID(vid)
|
command += " " + chr.GetNameByVID(vid)
|
||||||
@@ -521,7 +540,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
except:
|
except:
|
||||||
#import exception
|
#import exception
|
||||||
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
||||||
## 게임이 튕겨 버림
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8> <20><><EFBFBD><EFBFBD>
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.__RefreshStatusPlusButtonList()
|
self.__RefreshStatusPlusButtonList()
|
||||||
@@ -595,25 +614,21 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
statusPlusButton.Hide()
|
statusPlusButton.Hide()
|
||||||
|
|
||||||
def SelectSkill(self, skillSlotIndex):
|
def SelectSkill(self, skillSlotIndex):
|
||||||
|
|
||||||
mouseController = mouseModule.mouseController
|
mouseController = mouseModule.mouseController
|
||||||
|
|
||||||
if False == mouseController.isAttached():
|
if False == mouseController.isAttached():
|
||||||
|
|
||||||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
|
srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
|
||||||
selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
|
selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
|
||||||
|
|
||||||
if skill.CanUseSkill(selectedSkillIndex):
|
if skill.CanUseSkill(selectedSkillIndex):
|
||||||
|
|
||||||
if app.IsPressed(app.DIK_LCONTROL):
|
if app.IsPressed(app.DIK_LCONTROL):
|
||||||
|
|
||||||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
|
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
|
mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
mouseController.DeattachObject()
|
mouseController.DeattachObject()
|
||||||
|
|
||||||
def SelectEmptySlot(self, SlotIndex):
|
def SelectEmptySlot(self, SlotIndex):
|
||||||
@@ -621,7 +636,6 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
## ToolTip
|
## ToolTip
|
||||||
def OverInItem(self, slotNumber):
|
def OverInItem(self, slotNumber):
|
||||||
|
|
||||||
if mouseModule.mouseController.isAttached():
|
if mouseModule.mouseController.isAttached():
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -728,6 +742,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def __GetStatMinusPoint(self):
|
def __GetStatMinusPoint(self):
|
||||||
POINT_STAT_RESET_COUNT = 112
|
POINT_STAT_RESET_COUNT = 112
|
||||||
|
|
||||||
return player.GetStatus(POINT_STAT_RESET_COUNT)
|
return player.GetStatus(POINT_STAT_RESET_COUNT)
|
||||||
|
|
||||||
def __OverInStatMinusButton(self, stat):
|
def __OverInStatMinusButton(self, stat):
|
||||||
@@ -761,6 +776,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def OnPressEscapeKey(self):
|
def OnPressEscapeKey(self):
|
||||||
self.Close()
|
self.Close()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def OnUpdate(self):
|
def OnUpdate(self):
|
||||||
@@ -771,20 +787,20 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
global SHOW_LIMIT_SUPPORT_SKILL_LIST
|
global SHOW_LIMIT_SUPPORT_SKILL_LIST
|
||||||
|
|
||||||
skillPage = self.skillPageDict[name]
|
skillPage = self.skillPageDict[name]
|
||||||
|
|
||||||
startSlotIndex = skillPage.GetStartIndex()
|
startSlotIndex = skillPage.GetStartIndex()
|
||||||
|
|
||||||
if "ACTIVE" == name:
|
if "ACTIVE" == name:
|
||||||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||||||
startSlotIndex += slotCount
|
startSlotIndex += slotCount
|
||||||
|
|
||||||
getSkillType=skill.GetSkillType
|
getSkillType = skill.GetSkillType
|
||||||
getSkillIndex=player.GetSkillIndex
|
getSkillIndex = player.GetSkillIndex
|
||||||
getSkillGrade=player.GetSkillGrade
|
getSkillGrade = player.GetSkillGrade
|
||||||
getSkillLevel=player.GetSkillLevel
|
getSkillLevel = player.GetSkillLevel
|
||||||
getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
|
getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
|
||||||
getSkillMaxLevel=skill.GetSkillMaxLevel
|
getSkillMaxLevel = skill.GetSkillMaxLevel
|
||||||
for i in xrange(slotCount+1):
|
|
||||||
|
|
||||||
|
for i in xrange(slotCount + 1):
|
||||||
slotIndex = i + startSlotIndex
|
slotIndex = i + startSlotIndex
|
||||||
skillIndex = getSkillIndex(slotIndex)
|
skillIndex = getSkillIndex(slotIndex)
|
||||||
|
|
||||||
@@ -798,7 +814,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
skillLevel = getSkillLevel(slotIndex)
|
skillLevel = getSkillLevel(slotIndex)
|
||||||
skillType = getSkillType(skillIndex)
|
skillType = getSkillType(skillIndex)
|
||||||
|
|
||||||
## 승마 스킬 예외 처리
|
## <EFBFBD>¸<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||||
if player.SKILL_INDEX_RIDING == skillIndex:
|
if player.SKILL_INDEX_RIDING == skillIndex:
|
||||||
if 1 == skillGrade:
|
if 1 == skillGrade:
|
||||||
skillLevel += 19
|
skillLevel += 19
|
||||||
@@ -807,48 +823,116 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
elif 3 == skillGrade:
|
elif 3 == skillGrade:
|
||||||
skillLevel = 40
|
skillLevel = 40
|
||||||
|
|
||||||
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
|
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel - 1, 0), skillLevel)
|
||||||
skillPage.SetSlotCount(slotIndex, skillLevel)
|
skillPage.SetSlotCount(slotIndex, skillLevel)
|
||||||
|
|
||||||
## ACTIVE
|
## ACTIVE
|
||||||
elif skill.SKILL_TYPE_ACTIVE == skillType:
|
elif skill.SKILL_TYPE_ACTIVE == skillType:
|
||||||
for j in xrange(skill.SKILL_GRADE_COUNT):
|
for j in xrange(skill.SKILL_GRADE_COUNT):
|
||||||
realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
|
realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
|
||||||
|
|
||||||
skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
|
skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
|
||||||
skillPage.SetCoverButton(realSlotIndex)
|
skillPage.SetCoverButton(realSlotIndex)
|
||||||
|
|
||||||
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
|
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1):
|
||||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||||
elif (not self.__CanUseSkillNow()) or (skillGrade != j):
|
elif (not self.__CanUseSkillNow()) or (skillGrade != j):
|
||||||
skillPage.SetSlotCount(realSlotIndex, 0)
|
skillPage.SetSlotCount(realSlotIndex, 0)
|
||||||
skillPage.DisableCoverButton(realSlotIndex)
|
skillPage.DisableCoverButton(realSlotIndex)
|
||||||
|
|
||||||
|
if not player.IsSkillActive(slotIndex):
|
||||||
|
skillPage.DeactivateSlot(realSlotIndex)
|
||||||
|
|
||||||
|
if player.IsSkillCoolTime(slotIndex) and skillGrade != j:
|
||||||
|
skillPage.TransferSlotCoolTime(realSlotIndex, self.__GetRealSkillSlot(skillGrade, i))
|
||||||
|
else:
|
||||||
|
self.SkillClearCoolTime(realSlotIndex)
|
||||||
else:
|
else:
|
||||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||||
|
|
||||||
## 그외
|
# Check if this is the active slot
|
||||||
|
# Grade 3 appears in slot 2, so check both conditions
|
||||||
|
isActiveSlot = (skillGrade == j) or ((skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1))
|
||||||
|
|
||||||
|
if player.IsSkillActive(slotIndex) and isActiveSlot:
|
||||||
|
skillPage.ActivateSlot(realSlotIndex)
|
||||||
|
else:
|
||||||
|
skillPage.DeactivateSlot(realSlotIndex)
|
||||||
else:
|
else:
|
||||||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||||||
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||||
|
|
||||||
skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
|
skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
|
||||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||||
|
|
||||||
if skill.CanUseSkill(skillIndex):
|
if skill.CanUseSkill(skillIndex):
|
||||||
skillPage.SetCoverButton(realSlotIndex)
|
skillPage.SetCoverButton(realSlotIndex)
|
||||||
|
|
||||||
|
# Clear storage for horse skills at level 0 BEFORE restore runs
|
||||||
|
if skillType == skill.SKILL_TYPE_HORSE and skillLevel == 0:
|
||||||
|
player.ResetHorseSkillCoolTime(skillIndex, realSlotIndex)
|
||||||
|
skillPage.SetSlotCoolTime(realSlotIndex, 0)
|
||||||
|
|
||||||
|
if player.IsSkillActive(slotIndex):
|
||||||
|
skillPage.ActivateSlot(realSlotIndex)
|
||||||
|
else:
|
||||||
|
skillPage.DeactivateSlot(realSlotIndex)
|
||||||
|
|
||||||
skillPage.RefreshSlot()
|
skillPage.RefreshSlot()
|
||||||
|
|
||||||
|
self.__RestoreSlotCoolTime(skillPage)
|
||||||
|
|
||||||
|
def __RestoreSlotCoolTime(self, skillPage):
|
||||||
|
restoreType = skill.SKILL_TYPE_NONE
|
||||||
|
|
||||||
|
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||||||
|
restoreType = skill.SKILL_TYPE_HORSE
|
||||||
|
else:
|
||||||
|
restoreType = skill.SKILL_TYPE_ACTIVE
|
||||||
|
|
||||||
|
skillPage.RestoreSlotCoolTime(restoreType)
|
||||||
|
|
||||||
|
def __ClearHorseSkillQuickSlots(self):
|
||||||
|
HORSE_SKILL_SET = (137, 138, 139, 140)
|
||||||
|
|
||||||
|
quick_slot_per_page = 8 # two quick_slot windows * 4 slots
|
||||||
|
quick_page_count = 4 # matches QUICKPAGE_NUMBER_FILENAME
|
||||||
|
current_page = player.GetQuickPage()
|
||||||
|
|
||||||
|
for page in xrange(quick_page_count):
|
||||||
|
player.SetQuickPage(page)
|
||||||
|
|
||||||
|
for local_slot in xrange(quick_slot_per_page):
|
||||||
|
slotType, position = player.GetLocalQuickSlot(local_slot)
|
||||||
|
|
||||||
|
if slotType != player.SLOT_TYPE_SKILL:
|
||||||
|
continue
|
||||||
|
|
||||||
|
skillIndex = player.GetSkillIndex(position)
|
||||||
|
|
||||||
|
if skillIndex in HORSE_SKILL_SET:
|
||||||
|
player.RequestDeleteGlobalQuickSlot(page * quick_slot_per_page + local_slot)
|
||||||
|
|
||||||
|
player.SetQuickPage(current_page)
|
||||||
|
|
||||||
def RefreshSkill(self):
|
def RefreshSkill(self):
|
||||||
|
if self.isLoaded == 0:
|
||||||
if self.isLoaded==0:
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.__IsChangedHorseRidingSkillLevel():
|
if self.__IsChangedHorseRidingSkillLevel():
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
if not self.__CanUseHorseSkill():
|
||||||
|
if self.curSelectedSkillGroup == self.PAGE_HORSE:
|
||||||
|
self.__SelectSkillGroup(0) # fall back to first active tab
|
||||||
|
|
||||||
|
self.__ClearHorseSkillQuickSlots() # remove horse skills from taskbar
|
||||||
|
|
||||||
self.RefreshCharacter()
|
self.RefreshCharacter()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
global SHOW_ONLY_ACTIVE_SKILL
|
global SHOW_ONLY_ACTIVE_SKILL
|
||||||
|
|
||||||
if SHOW_ONLY_ACTIVE_SKILL:
|
if SHOW_ONLY_ACTIVE_SKILL:
|
||||||
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
|
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
|
||||||
else:
|
else:
|
||||||
@@ -858,12 +942,11 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.RefreshSkillPlusButtonList()
|
self.RefreshSkillPlusButtonList()
|
||||||
|
|
||||||
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
||||||
|
## <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
## 스킬이 있으면
|
|
||||||
if 0 == skillIndex:
|
if 0 == skillIndex:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
## 레벨업 조건을 만족한다면
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
|
||||||
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -871,6 +954,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def __RefreshSkillPlusButton(self, name):
|
def __RefreshSkillPlusButton(self, name):
|
||||||
global HIDE_SUPPORT_SKILL_POINT
|
global HIDE_SUPPORT_SKILL_POINT
|
||||||
|
|
||||||
if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
|
if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -878,11 +962,13 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
slotWindow.HideAllSlotButton()
|
slotWindow.HideAllSlotButton()
|
||||||
|
|
||||||
slotStatType = self.skillPageStatDict[name]
|
slotStatType = self.skillPageStatDict[name]
|
||||||
|
|
||||||
if 0 == slotStatType:
|
if 0 == slotStatType:
|
||||||
return
|
return
|
||||||
|
|
||||||
statPoint = player.GetStatus(slotStatType)
|
statPoint = player.GetStatus(slotStatType)
|
||||||
startSlotIndex = slotWindow.GetStartIndex()
|
startSlotIndex = slotWindow.GetStartIndex()
|
||||||
|
|
||||||
if "HORSE" == name:
|
if "HORSE" == name:
|
||||||
startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
|
startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
|
||||||
|
|
||||||
@@ -904,7 +990,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
|
slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if "SUPPORT" == name:
|
if "SUPPORT" == name:
|
||||||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||||||
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
|
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
|
||||||
slotWindow.ShowSlotButton(slotIndex)
|
slotWindow.ShowSlotButton(slotIndex)
|
||||||
@@ -914,7 +1000,6 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
|
|
||||||
def RefreshSkillPlusButtonList(self):
|
def RefreshSkillPlusButtonList(self):
|
||||||
|
|
||||||
if self.isLoaded==0:
|
if self.isLoaded==0:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -933,6 +1018,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
except:
|
except:
|
||||||
import exception
|
import exception
|
||||||
|
|
||||||
exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
|
exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
|
||||||
|
|
||||||
def RefreshSkillPlusPointLabel(self):
|
def RefreshSkillPlusPointLabel(self):
|
||||||
@@ -979,10 +1065,9 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
mouseModule.mouseController.DeattachObject()
|
mouseModule.mouseController.DeattachObject()
|
||||||
|
|
||||||
## FIXME : 스킬을 사용했을때 슬롯 번호를 가지고 해당 슬롯을 찾아서 업데이트 한다.
|
## FIXME : <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||||
## 매우 불합리. 구조 자체를 개선해야 할듯.
|
## <EFBFBD>ſ<EFBFBD> <20><><EFBFBD>ո<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>.
|
||||||
def OnUseSkill(self, slotIndex, coolTime):
|
def OnUseSkill(self, slotIndex, coolTime):
|
||||||
|
|
||||||
skillIndex = player.GetSkillIndex(slotIndex)
|
skillIndex = player.GetSkillIndex(slotIndex)
|
||||||
skillType = skill.GetSkillType(skillIndex)
|
skillType = skill.GetSkillType(skillIndex)
|
||||||
|
|
||||||
@@ -996,32 +1081,69 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
for slotWindow in self.skillPageDict.values():
|
for slotWindow in self.skillPageDict.values():
|
||||||
if slotWindow.HasSlot(slotIndex):
|
if slotWindow.HasSlot(slotIndex):
|
||||||
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
|
slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime)
|
||||||
|
self.__RestoreSlotCoolTime(slotWindow)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def OnActivateSkill(self, slotIndex):
|
def OnActivateSkill(self, slotIndex):
|
||||||
|
skillIndex = player.GetSkillIndex(slotIndex)
|
||||||
skillGrade = player.GetSkillGrade(slotIndex)
|
skillType = skill.GetSkillType(skillIndex)
|
||||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
|
||||||
|
## ACTIVE
|
||||||
|
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||||
|
skillGrade = player.GetSkillGrade(slotIndex)
|
||||||
|
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||||
|
## ETC
|
||||||
|
else:
|
||||||
|
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||||
|
|
||||||
for slotWindow in self.skillPageDict.values():
|
for slotWindow in self.skillPageDict.values():
|
||||||
if slotWindow.HasSlot(slotIndex):
|
if slotWindow.HasSlot(slotIndex):
|
||||||
slotWindow.ActivateSlot(slotIndex)
|
slotWindow.ActivateSlot(slotIndex)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def OnDeactivateSkill(self, slotIndex):
|
def OnDeactivateSkill(self, slotIndex):
|
||||||
|
skillIndex = player.GetSkillIndex(slotIndex)
|
||||||
skillGrade = player.GetSkillGrade(slotIndex)
|
skillType = skill.GetSkillType(skillIndex)
|
||||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
|
||||||
|
## ACTIVE
|
||||||
|
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||||
|
skillGrade = player.GetSkillGrade(slotIndex)
|
||||||
|
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||||
|
## ETC
|
||||||
|
else:
|
||||||
|
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||||
|
|
||||||
for slotWindow in self.skillPageDict.values():
|
for slotWindow in self.skillPageDict.values():
|
||||||
if slotWindow.HasSlot(slotIndex):
|
if slotWindow.HasSlot(slotIndex):
|
||||||
slotWindow.DeactivateSlot(slotIndex)
|
slotWindow.DeactivateSlot(slotIndex)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def __ShowJobToolTip(self):
|
def __ShowJobToolTip(self):
|
||||||
self.toolTipJob.ShowToolTip()
|
self.toolTipJob.ShowToolTip()
|
||||||
|
|
||||||
|
def SkillClearCoolTime(self, slotIndex):
|
||||||
|
skillIndex = player.GetSkillIndex(slotIndex)
|
||||||
|
|
||||||
|
if skillIndex < 1:
|
||||||
|
return
|
||||||
|
|
||||||
|
skillType = skill.GetSkillType(skillIndex)
|
||||||
|
|
||||||
|
## ACTIVE
|
||||||
|
# Map to the correct visual slot based on skill type
|
||||||
|
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||||
|
slotIndex = self.__GetRealSkillSlot(player.GetSkillGrade(slotIndex), slotIndex)
|
||||||
|
else:
|
||||||
|
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||||
|
|
||||||
|
for slotWindow in self.skillPageDict.values():
|
||||||
|
if slotWindow.HasSlot(slotIndex):
|
||||||
|
slotWindow.SetSlotCoolTime(slotIndex, 0)
|
||||||
|
|
||||||
def __HideJobToolTip(self):
|
def __HideJobToolTip(self):
|
||||||
self.toolTipJob.HideToolTip()
|
self.toolTipJob.HideToolTip()
|
||||||
|
|
||||||
@@ -1037,6 +1159,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
|
jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
|
print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
|
self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
|
||||||
@@ -1105,18 +1228,16 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
## GroupName
|
## GroupName
|
||||||
self.__SetSkillGroupName(race, group)
|
self.__SetSkillGroupName(race, group)
|
||||||
|
|
||||||
|
self.__SetSkillSlotData(race, group, empire)
|
||||||
|
|
||||||
## Skill
|
## Skill
|
||||||
if 0 == group:
|
if 0 == group:
|
||||||
self.__SelectSkillGroup(0)
|
self.__SelectSkillGroup(0)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.__SetSkillSlotData(race, group, empire)
|
|
||||||
|
|
||||||
if self.__CanUseHorseSkill():
|
if self.__CanUseHorseSkill():
|
||||||
self.__SelectSkillGroup(0)
|
self.__SelectSkillGroup(0)
|
||||||
|
|
||||||
def __SetSkillGroupName(self, race, group):
|
def __SetSkillGroupName(self, race, group):
|
||||||
|
|
||||||
job = chr.RaceToJob(race)
|
job = chr.RaceToJob(race)
|
||||||
|
|
||||||
if not self.SKILL_GROUP_NAME_DICT.has_key(job):
|
if not self.SKILL_GROUP_NAME_DICT.has_key(job):
|
||||||
@@ -1127,27 +1248,43 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
if 0 == group:
|
if 0 == group:
|
||||||
self.skillGroupButton1.SetText(nameList[1])
|
self.skillGroupButton1.SetText(nameList[1])
|
||||||
self.skillGroupButton2.SetText(nameList[2])
|
self.skillGroupButton2.SetText(nameList[2])
|
||||||
|
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
if self.__CanUseHorseSkill():
|
||||||
|
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||||
|
self.skillGroupButton3.Show()
|
||||||
|
self.skillGroupButton3.SetPosition(95, 2)
|
||||||
|
else:
|
||||||
|
self.skillGroupButton3.Hide()
|
||||||
|
|
||||||
self.skillGroupButton1.Show()
|
self.skillGroupButton1.Show()
|
||||||
self.skillGroupButton2.Show()
|
self.skillGroupButton2.Show()
|
||||||
self.activeSkillGroupName.Hide()
|
self.activeSkillGroupName.Hide()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
if self.__CanUseHorseSkill():
|
if self.__CanUseHorseSkill():
|
||||||
self.activeSkillGroupName.Hide()
|
self.activeSkillGroupName.Hide()
|
||||||
self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
|
self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
|
||||||
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
|
|
||||||
self.skillGroupButton1.Show()
|
|
||||||
self.skillGroupButton2.Show()
|
|
||||||
|
|
||||||
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||||
|
self.skillGroupButton1.Show()
|
||||||
|
self.skillGroupButton2.Hide()
|
||||||
|
self.skillGroupButton3.Show()
|
||||||
|
self.skillGroupButton3.SetPosition(50, 2)
|
||||||
|
else:
|
||||||
|
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||||
|
self.skillGroupButton1.Show()
|
||||||
|
self.skillGroupButton2.Show()
|
||||||
else:
|
else:
|
||||||
self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
|
self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
|
||||||
self.activeSkillGroupName.Show()
|
self.activeSkillGroupName.Show()
|
||||||
self.skillGroupButton1.Hide()
|
self.skillGroupButton1.Hide()
|
||||||
self.skillGroupButton2.Hide()
|
self.skillGroupButton2.Hide()
|
||||||
|
|
||||||
def __SetSkillSlotData(self, race, group, empire=0):
|
if app.FIX_HORSE_SKILLS_TAB:
|
||||||
|
self.skillGroupButton3.Hide()
|
||||||
|
|
||||||
|
def __SetSkillSlotData(self, race, group, empire=0):
|
||||||
## SkillIndex
|
## SkillIndex
|
||||||
playerSettingModule.RegisterSkill(race, group, empire)
|
playerSettingModule.RegisterSkill(race, group, empire)
|
||||||
|
|
||||||
@@ -1157,19 +1294,26 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
## Refresh
|
## Refresh
|
||||||
self.RefreshSkill()
|
self.RefreshSkill()
|
||||||
|
|
||||||
def __SelectSkillGroup(self, index):
|
def __SelectSkillGroup(self, pageIndex, (PAGE_SKILL_1, PAGE_SKILL_2, PAGE_SKILL_HORSE) = range(3)):
|
||||||
for btn in self.skillGroupButton:
|
for pageButton in self.skillGroupButton:
|
||||||
btn.SetUp()
|
pageButton.SetUp()
|
||||||
self.skillGroupButton[index].Down()
|
|
||||||
|
|
||||||
if self.__CanUseHorseSkill():
|
self.skillGroupButton[pageIndex].Down()
|
||||||
if 0 == index:
|
|
||||||
index = net.GetMainActorSkillGroup()-1
|
|
||||||
elif 1 == index:
|
|
||||||
index = self.PAGE_HORSE
|
|
||||||
|
|
||||||
self.curSelectedSkillGroup = index
|
if pageIndex in (PAGE_SKILL_1, PAGE_SKILL_2):
|
||||||
self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
|
skillGroupIndex = net.GetMainActorSkillGroup()
|
||||||
|
|
||||||
|
if bool(skillGroupIndex):
|
||||||
|
(tmpCurSkillGroup, tmpSkillGroup) = (skillGroupIndex - 1, skillGroupIndex)
|
||||||
|
else:
|
||||||
|
(tmpCurSkillGroup, tmpSkillGroup) = (pageIndex, pageIndex + 1)
|
||||||
|
|
||||||
|
self.curSelectedSkillGroup = tmpCurSkillGroup
|
||||||
|
self.__SetSkillSlotData(net.GetMainActorRace(), tmpSkillGroup, net.GetMainActorEmpire())
|
||||||
|
elif pageIndex == PAGE_SKILL_HORSE and self.__CanUseHorseSkill():
|
||||||
|
self.curSelectedSkillGroup = self.PAGE_HORSE
|
||||||
|
|
||||||
|
self.RefreshSkill()
|
||||||
|
|
||||||
def __CanUseSkillNow(self):
|
def __CanUseSkillNow(self):
|
||||||
if 0 == net.GetMainActorSkillGroup():
|
if 0 == net.GetMainActorSkillGroup():
|
||||||
@@ -1178,7 +1322,6 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def __CanUseHorseSkill(self):
|
def __CanUseHorseSkill(self):
|
||||||
|
|
||||||
slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
|
slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
|
||||||
|
|
||||||
if not slotIndex:
|
if not slotIndex:
|
||||||
@@ -1186,12 +1329,27 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
grade = player.GetSkillGrade(slotIndex)
|
grade = player.GetSkillGrade(slotIndex)
|
||||||
level = player.GetSkillLevel(slotIndex)
|
level = player.GetSkillLevel(slotIndex)
|
||||||
|
|
||||||
if level < 0:
|
if level < 0:
|
||||||
level *= -1
|
level *= -1
|
||||||
if grade >= 1 and level >= 1:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
# Map to UI-displayed riding level (matches __RefreshSkillPage logic)
|
||||||
|
# grade 1: base 1..20 shown as 20..39 (offset +19)
|
||||||
|
# grade 2: base 1..10 shown as 30..39 (offset +29)
|
||||||
|
# grade 3: shown as 40
|
||||||
|
effective = 0
|
||||||
|
|
||||||
|
if grade >= 3:
|
||||||
|
effective = 40
|
||||||
|
elif grade == 2:
|
||||||
|
effective = level + 29
|
||||||
|
elif grade == 1:
|
||||||
|
effective = level + 19
|
||||||
|
else:
|
||||||
|
effective = level
|
||||||
|
|
||||||
|
# Require displayed riding level >= 21 to enable the horse page
|
||||||
|
return effective >= 21
|
||||||
|
|
||||||
def __IsChangedHorseRidingSkillLevel(self):
|
def __IsChangedHorseRidingSkillLevel(self):
|
||||||
ret = False
|
ret = False
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import uiRefine
|
|||||||
import uiAttachMetin
|
import uiAttachMetin
|
||||||
import uiPickMoney
|
import uiPickMoney
|
||||||
import uiCommon
|
import uiCommon
|
||||||
import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지
|
import uiPrivateShopBuilder # <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemMove <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
import localeInfo
|
import localeInfo
|
||||||
import constInfo
|
import constInfo
|
||||||
import ime
|
import ime
|
||||||
@@ -41,7 +41,7 @@ class CostumeWindow(ui.ScriptWindow):
|
|||||||
ui.ScriptWindow.__init__(self)
|
ui.ScriptWindow.__init__(self)
|
||||||
|
|
||||||
self.isLoaded = 0
|
self.isLoaded = 0
|
||||||
self.wndInventory = wndInventory;
|
self.wndInventory = wndInventory
|
||||||
|
|
||||||
self.__LoadWindow()
|
self.__LoadWindow()
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
|||||||
ui.ScriptWindow.__init__(self)
|
ui.ScriptWindow.__init__(self)
|
||||||
|
|
||||||
self.isLoaded = 0
|
self.isLoaded = 0
|
||||||
self.wndInventory = wndInventory;
|
self.wndInventory = wndInventory
|
||||||
|
|
||||||
self.wndBeltInventoryLayer = None
|
self.wndBeltInventoryLayer = None
|
||||||
self.wndBeltInventorySlot = None
|
self.wndBeltInventorySlot = None
|
||||||
@@ -156,7 +156,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
|||||||
if localeInfo.IsARABIC() == 0:
|
if localeInfo.IsARABIC() == 0:
|
||||||
self.AdjustPositionAndSize()
|
self.AdjustPositionAndSize()
|
||||||
|
|
||||||
## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다..
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA>丮 <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BASE <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD><DAB5>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
|
||||||
def GetBasePosition(self):
|
def GetBasePosition(self):
|
||||||
x, y = self.wndInventory.GetGlobalPosition()
|
x, y = self.wndInventory.GetGlobalPosition()
|
||||||
return x - 148, y + 241
|
return x - 148, y + 241
|
||||||
@@ -169,7 +169,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
|||||||
self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
|
self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.SetPosition(bx + 138, by);
|
self.SetPosition(bx + 138, by)
|
||||||
self.SetSize(10, self.GetHeight())
|
self.SetSize(10, self.GetHeight())
|
||||||
|
|
||||||
def __LoadWindow(self):
|
def __LoadWindow(self):
|
||||||
@@ -251,13 +251,13 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
sellingSlotNumber = -1
|
sellingSlotNumber = -1
|
||||||
isLoaded = 0
|
isLoaded = 0
|
||||||
isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
isOpenedCostumeWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
ui.ScriptWindow.__init__(self)
|
ui.ScriptWindow.__init__(self)
|
||||||
|
|
||||||
self.isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
self.isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
self.__LoadWindow()
|
self.__LoadWindow()
|
||||||
|
|
||||||
@@ -269,11 +269,11 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
ui.ScriptWindow.Show(self)
|
ui.ScriptWindow.Show(self)
|
||||||
|
|
||||||
# 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
|
# <EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||||
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
|
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
|
||||||
self.wndCostume.Show()
|
self.wndCostume.Show()
|
||||||
|
|
||||||
# 인벤토리를 닫을 때 벨트 인벤토리가 열려있었다면 같이 열도록 함.
|
# <EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||||
if self.wndBelt:
|
if self.wndBelt:
|
||||||
self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
|
self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
|
||||||
|
|
||||||
@@ -439,11 +439,11 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
self.tooltipItem.HideToolTip()
|
self.tooltipItem.HideToolTip()
|
||||||
|
|
||||||
if self.wndCostume:
|
if self.wndCostume:
|
||||||
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
|
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
|
||||||
self.wndCostume.Close()
|
self.wndCostume.Close()
|
||||||
|
|
||||||
if self.wndBelt:
|
if self.wndBelt:
|
||||||
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가?
|
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
|
||||||
print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
|
print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
|
||||||
self.wndBelt.Close()
|
self.wndBelt.Close()
|
||||||
|
|
||||||
@@ -508,7 +508,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
|
self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
|
||||||
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
|
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
|
||||||
self.dlgPickMoney.Open(curMoney)
|
self.dlgPickMoney.Open(curMoney)
|
||||||
self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정
|
self.dlgPickMoney.SetMax(7) # <EFBFBD>κ<EFBFBD><EFBFBD>丮 990000 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
def OnPickMoney(self, money):
|
def OnPickMoney(self, money):
|
||||||
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
|
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
|
||||||
@@ -533,7 +533,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
|
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
|
||||||
|
|
||||||
itemCount = getItemCount(slotNumber)
|
itemCount = getItemCount(slotNumber)
|
||||||
# itemCount == 0이면 소켓을 비운다.
|
# itemCount == 0<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||||
if 0 == itemCount:
|
if 0 == itemCount:
|
||||||
self.wndItem.ClearSlot(i)
|
self.wndItem.ClearSlot(i)
|
||||||
continue
|
continue
|
||||||
@@ -543,19 +543,19 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
itemVnum = getItemVNum(slotNumber)
|
itemVnum = getItemVNum(slotNumber)
|
||||||
setItemVNum(i, itemVnum, itemCount)
|
setItemVNum(i, itemVnum, itemCount)
|
||||||
|
|
||||||
## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
|
## <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP: #72723 ~ #72726, SP: #72727 ~ #72730) Ư<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>Կ<EFBFBD> Ȱ<><C8B0>ȭ/<2F><>Ȱ<EFBFBD><C8B0>ȭ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> - [hyo]
|
||||||
if constInfo.IS_AUTO_POTION(itemVnum):
|
if constInfo.IS_AUTO_POTION(itemVnum):
|
||||||
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
|
# metinSocket - [0] : Ȱ<EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>, [1] : <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, [2] : <EFBFBD>ִ<EFBFBD> <20>뷮
|
||||||
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
|
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
|
||||||
|
|
||||||
if slotNumber >= player.INVENTORY_PAGE_SIZE:
|
if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
|
||||||
slotNumber -= player.INVENTORY_PAGE_SIZE
|
slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
|
||||||
|
|
||||||
isActivated = 0 != metinSocket[0]
|
isActivated = 0 != metinSocket[0]
|
||||||
|
|
||||||
if isActivated:
|
if isActivated:
|
||||||
self.wndItem.ActivateSlot(slotNumber)
|
self.wndItem.ActivateSlot(slotNumber)
|
||||||
potionType = 0;
|
potionType = 0
|
||||||
if constInfo.IS_AUTO_POTION_HP(itemVnum):
|
if constInfo.IS_AUTO_POTION_HP(itemVnum):
|
||||||
potionType = player.AUTO_POTION_TYPE_HP
|
potionType = player.AUTO_POTION_TYPE_HP
|
||||||
elif constInfo.IS_AUTO_POTION_SP(itemVnum):
|
elif constInfo.IS_AUTO_POTION_SP(itemVnum):
|
||||||
@@ -614,7 +614,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
def SellItem(self):
|
def SellItem(self):
|
||||||
if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
|
if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
|
||||||
if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
|
if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
|
||||||
## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가
|
## <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȸ<EFBFBD><C8B8><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD> <20>߰<EFBFBD><DFB0>ϸ鼭 <20><><EFBFBD><EFBFBD> type <EFBFBD>߰<EFBFBD>
|
||||||
net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
|
net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
|
||||||
snd.PlaySound("sound/ui/money.wav")
|
snd.PlaySound("sound/ui/money.wav")
|
||||||
self.OnCloseQuestionDialog()
|
self.OnCloseQuestionDialog()
|
||||||
@@ -764,10 +764,10 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
else:
|
else:
|
||||||
#snd.PlaySound("sound/ui/drop.wav")
|
#snd.PlaySound("sound/ui/drop.wav")
|
||||||
|
|
||||||
## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
|
## <EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2> - [levites]
|
||||||
if player.IsEquipmentSlot(dstItemSlotPos):
|
if player.IsEquipmentSlot(dstItemSlotPos):
|
||||||
|
|
||||||
## 들고 있는 아이템이 장비일때만
|
## <EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
|
||||||
if item.IsEquipmentVID(srcItemVID):
|
if item.IsEquipmentVID(srcItemVID):
|
||||||
self.__UseItem(srcItemSlotPos)
|
self.__UseItem(srcItemSlotPos)
|
||||||
|
|
||||||
@@ -786,7 +786,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
self.sellingSlotitemCount = itemCount
|
self.sellingSlotitemCount = itemCount
|
||||||
|
|
||||||
item.SelectItem(itemIndex)
|
item.SelectItem(itemIndex)
|
||||||
## 안티 플레그 검사 빠져서 추가
|
## <EFBFBD><EFBFBD>Ƽ <20>÷<EFBFBD><C3B7><EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||||
## 20140220
|
## 20140220
|
||||||
if item.IsAntiFlag(item.ANTIFLAG_SELL):
|
if item.IsAntiFlag(item.ANTIFLAG_SELL):
|
||||||
popup = uiCommon.PopupDialog()
|
popup = uiCommon.PopupDialog()
|
||||||
@@ -932,7 +932,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
|
|
||||||
def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
|
def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
|
||||||
"다른 아이템에 사용할 수 있는 아이템인가?"
|
"<EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?"
|
||||||
|
|
||||||
if item.IsRefineScroll(srcItemVNum):
|
if item.IsRefineScroll(srcItemVNum):
|
||||||
return True
|
return True
|
||||||
@@ -951,7 +951,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
|
def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
|
||||||
"대상 아이템에 사용할 수 있는가?"
|
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ°<D6B4>?"
|
||||||
|
|
||||||
if srcSlotPos == dstSlotPos:
|
if srcSlotPos == dstSlotPos:
|
||||||
return False
|
return False
|
||||||
@@ -992,7 +992,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
return True
|
return True
|
||||||
elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
|
elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
|
||||||
if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
|
if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
|
||||||
return TRUE;
|
return TRUE
|
||||||
elif "USE_PUT_INTO_BELT_SOCKET" == useType:
|
elif "USE_PUT_INTO_BELT_SOCKET" == useType:
|
||||||
dstItemVNum = player.GetItemIndex(dstSlotPos)
|
dstItemVNum = player.GetItemIndex(dstSlotPos)
|
||||||
print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
|
print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
|
||||||
@@ -1158,7 +1158,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
self.OnCloseQuestionDialog()
|
self.OnCloseQuestionDialog()
|
||||||
|
|
||||||
def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
|
def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
|
||||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||||
return
|
return
|
||||||
@@ -1166,7 +1166,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
|
net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
|
||||||
|
|
||||||
def __SendUseItemPacket(self, slotPos):
|
def __SendUseItemPacket(self, slotPos):
|
||||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||||
return
|
return
|
||||||
@@ -1174,7 +1174,7 @@ class InventoryWindow(ui.ScriptWindow):
|
|||||||
net.SendItemUsePacket(slotPos)
|
net.SendItemUsePacket(slotPos)
|
||||||
|
|
||||||
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
|
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
|
||||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class MessengerItem(ui.Window):
|
|||||||
|
|
||||||
def SetName(self, name):
|
def SetName(self, name):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
if name:
|
if name:
|
||||||
self.text.SetText(name)
|
self.text.SetText(name)
|
||||||
self.SetSize(20 + 6*len(name) + 4, 16)
|
self.SetSize(20 + 6*len(name) + 4, 16)
|
||||||
@@ -377,6 +378,14 @@ class MessengerWindow(ui.ScriptWindow):
|
|||||||
self.__AddGroup()
|
self.__AddGroup()
|
||||||
messenger.RefreshGuildMember()
|
messenger.RefreshGuildMember()
|
||||||
|
|
||||||
|
def InitializeHandler(self):
|
||||||
|
"""Load UI and register packet handlers without showing window"""
|
||||||
|
if self.isLoaded == 0:
|
||||||
|
self.isLoaded = 1
|
||||||
|
self.__LoadWindow()
|
||||||
|
self.OnRefreshList()
|
||||||
|
self.OnResizeDialog()
|
||||||
|
|
||||||
def Show(self):
|
def Show(self):
|
||||||
if self.isLoaded==0:
|
if self.isLoaded==0:
|
||||||
self.isLoaded=1
|
self.isLoaded=1
|
||||||
@@ -390,7 +399,7 @@ class MessengerWindow(ui.ScriptWindow):
|
|||||||
def __LoadWindow(self):
|
def __LoadWindow(self):
|
||||||
|
|
||||||
pyScrLoader = ui.PythonScriptLoader()
|
pyScrLoader = ui.PythonScriptLoader()
|
||||||
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
|
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.board = self.GetChild("board")
|
self.board = self.GetChild("board")
|
||||||
@@ -669,6 +678,11 @@ class MessengerWindow(ui.ScriptWindow):
|
|||||||
self.selectedItem.OnRemove()
|
self.selectedItem.OnRemove()
|
||||||
self.selectedItem.UnSelect()
|
self.selectedItem.UnSelect()
|
||||||
self.selectedItem = None
|
self.selectedItem = None
|
||||||
|
|
||||||
|
self.whisperButton.Disable()
|
||||||
|
self.mobileButton.Disable()
|
||||||
|
self.removeButton.Disable()
|
||||||
|
|
||||||
self.OnRefreshList()
|
self.OnRefreshList()
|
||||||
|
|
||||||
self.OnCloseQuestionDialog()
|
self.OnCloseQuestionDialog()
|
||||||
@@ -770,7 +784,24 @@ class MessengerWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def OnRemoveList(self, groupIndex, key):
|
def OnRemoveList(self, groupIndex, key):
|
||||||
group = self.groupList[groupIndex]
|
group = self.groupList[groupIndex]
|
||||||
group.RemoveMember(group.FindMember(key))
|
|
||||||
|
member = group.FindMember(key)
|
||||||
|
|
||||||
|
if not member:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.selectedItem is member or member.IsSameKey(key):
|
||||||
|
member.UnSelect()
|
||||||
|
self.selectedItem = None
|
||||||
|
|
||||||
|
# Optional: also disable buttons to mirror local delete flow
|
||||||
|
self.whisperButton.Disable()
|
||||||
|
self.mobileButton.Disable()
|
||||||
|
self.removeButton.Disable()
|
||||||
|
|
||||||
|
member.Hide()
|
||||||
|
group.RemoveMember(member)
|
||||||
|
|
||||||
self.OnRefreshList()
|
self.OnRefreshList()
|
||||||
|
|
||||||
def OnRemoveAllList(self, groupIndex):
|
def OnRemoveAllList(self, groupIndex):
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class EnergyBar(ui.ScriptWindow):
|
|||||||
def RefreshStatus(self):
|
def RefreshStatus(self):
|
||||||
pointEnergy = player.GetStatus (player.ENERGY)
|
pointEnergy = player.GetStatus (player.ENERGY)
|
||||||
leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
|
leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
|
||||||
# 충기환 지속 시간 = 2시간.
|
# <EFBFBD><EFBFBD><EFBFBD>ȯ <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> = 2<EFBFBD>ð<EFBFBD>.
|
||||||
self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
|
self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
|
||||||
|
|
||||||
def SetEnergy (self, point, leftTime, maxTime):
|
def SetEnergy (self, point, leftTime, maxTime):
|
||||||
@@ -336,7 +336,7 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
(coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
|
(coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
|
||||||
self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
||||||
|
|
||||||
## NOTE : Activate 되어 있다면 아이콘도 업데이트
|
## NOTE : Activate <EFBFBD>Ǿ<EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||||
if player.IsSkillActive(skillSlotNumber):
|
if player.IsSkillActive(skillSlotNumber):
|
||||||
self.ActivateSlot(slotNumber)
|
self.ActivateSlot(slotNumber)
|
||||||
|
|
||||||
@@ -439,7 +439,7 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
|
toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
|
||||||
toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
|
toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
|
||||||
|
|
||||||
# ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
|
# ChatButton, ExpandButton <EFBFBD><EFBFBD> <20><> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>ݵ<EFBFBD><DDB5> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||||
try:
|
try:
|
||||||
toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
|
toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
|
||||||
except:
|
except:
|
||||||
@@ -672,6 +672,22 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
for button in self.selectSkillButtonList:
|
for button in self.selectSkillButtonList:
|
||||||
button.RefreshSkill()
|
button.RefreshSkill()
|
||||||
|
|
||||||
|
def SkillClearCoolTime(self, usedSlotIndex):
|
||||||
|
QUICK_SLOT_SLOT_COUNT = 4
|
||||||
|
slotIndex = 0
|
||||||
|
|
||||||
|
for slotWindow in self.quickslot:
|
||||||
|
for i in xrange(QUICK_SLOT_SLOT_COUNT):
|
||||||
|
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
|
||||||
|
|
||||||
|
if Type == player.SLOT_TYPE_SKILL:
|
||||||
|
if usedSlotIndex == Position:
|
||||||
|
slotWindow.SetSlotCoolTime(slotIndex, 0)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
slotIndex += 1
|
||||||
|
|
||||||
def SetHP(self, curPoint, recoveryPoint, maxPoint):
|
def SetHP(self, curPoint, recoveryPoint, maxPoint):
|
||||||
curPoint = min(curPoint, maxPoint)
|
curPoint = min(curPoint, maxPoint)
|
||||||
if maxPoint > 0:
|
if maxPoint > 0:
|
||||||
@@ -765,9 +781,9 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
if itemCount <= 1:
|
if itemCount <= 1:
|
||||||
itemCount = 0
|
itemCount = 0
|
||||||
|
|
||||||
## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
|
## <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (#72723, #72724) Ư<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>Կ<EFBFBD> Ȱ<><C8B0>ȭ/<2F><>Ȱ<EFBFBD><C8B0>ȭ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> - [hyo]
|
||||||
if constInfo.IS_AUTO_POTION(itemIndex):
|
if constInfo.IS_AUTO_POTION(itemIndex):
|
||||||
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
|
# metinSocket - [0] : Ȱ<EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>, [1] : <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, [2] : <EFBFBD>ִ<EFBFBD> <20>뷮
|
||||||
metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
|
metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
|
||||||
|
|
||||||
if 0 != int(metinSocket[0]):
|
if 0 != int(metinSocket[0]):
|
||||||
@@ -776,17 +792,19 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
slot.DeactivateSlot(slotNumber)
|
slot.DeactivateSlot(slotNumber)
|
||||||
|
|
||||||
slot.SetItemSlot(slotNumber, itemIndex, itemCount)
|
slot.SetItemSlot(slotNumber, itemIndex, itemCount)
|
||||||
|
|
||||||
elif player.SLOT_TYPE_SKILL == Type:
|
elif player.SLOT_TYPE_SKILL == Type:
|
||||||
|
|
||||||
skillIndex = player.GetSkillIndex(Position)
|
skillIndex = player.GetSkillIndex(Position)
|
||||||
|
|
||||||
if 0 == skillIndex:
|
if 0 == skillIndex:
|
||||||
slot.ClearSlot(slotNumber)
|
slot.ClearSlot(slotNumber)
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
skillType = skill.GetSkillType(skillIndex)
|
skillType = skill.GetSkillType(skillIndex)
|
||||||
|
|
||||||
if skill.SKILL_TYPE_GUILD == skillType:
|
if skill.SKILL_TYPE_GUILD == skillType:
|
||||||
import guild
|
import guild
|
||||||
|
|
||||||
skillGrade = 0
|
skillGrade = 0
|
||||||
skillLevel = guild.GetSkillLevel(Position)
|
skillLevel = guild.GetSkillLevel(Position)
|
||||||
|
|
||||||
@@ -799,13 +817,19 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
slot.SetCoverButton(slotNumber)
|
slot.SetCoverButton(slotNumber)
|
||||||
|
|
||||||
## NOTE : CoolTime üũ
|
## NOTE : CoolTime üũ
|
||||||
if player.IsSkillCoolTime(Position):
|
if player.IsSkillCoolTime(Position) and skillLevel > 0:
|
||||||
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
|
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
|
||||||
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
|
||||||
|
|
||||||
## NOTE : Activate 되어 있다면 아이콘도 업데이트
|
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
||||||
|
else:
|
||||||
|
if skillType != skill.SKILL_TYPE_GUILD and skillLevel <= 0:
|
||||||
|
slot.SetSlotCoolTime(slotNumber, 0, 0)
|
||||||
|
|
||||||
|
## NOTE : Activate <20>Ǿ<EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||||
if player.IsSkillActive(Position):
|
if player.IsSkillActive(Position):
|
||||||
slot.ActivateSlot(slotNumber)
|
slot.ActivateSlot(slotNumber)
|
||||||
|
else:
|
||||||
|
slot.DeactivateSlot(slotNumber)
|
||||||
|
|
||||||
elif player.SLOT_TYPE_EMOTION == Type:
|
elif player.SLOT_TYPE_EMOTION == Type:
|
||||||
|
|
||||||
@@ -1047,8 +1071,8 @@ class TaskBar(ui.ScriptWindow):
|
|||||||
if skill.IsStandingSkill(skillIndex):
|
if skill.IsStandingSkill(skillIndex):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
|
## FIXME : <EFBFBD><EFBFBD>ų <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>Ҵ<EFBFBD><D2B4>ϴ°<CFB4> <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> ũ<><C5A9>.
|
||||||
## 이 부분은 시간을 나면 고치도록. - [levites]
|
## <EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD>. - [levites]
|
||||||
skillButton = self.SkillButton()
|
skillButton = self.SkillButton()
|
||||||
skillButton.SetSkill(startNumber+i)
|
skillButton.SetSkill(startNumber+i)
|
||||||
skillButton.SetPosition(x, y)
|
skillButton.SetPosition(x, y)
|
||||||
|
|||||||
@@ -556,6 +556,22 @@ window = {
|
|||||||
"down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub",
|
"down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
##horse skill page
|
||||||
|
{
|
||||||
|
"name" : "Skill_Group_Button_3",
|
||||||
|
"type" : "radio_button",
|
||||||
|
|
||||||
|
"x" : 95,
|
||||||
|
"y" : 2,
|
||||||
|
|
||||||
|
"text" : "Group3",
|
||||||
|
"text_color" : 0xFFFFE3AD,
|
||||||
|
|
||||||
|
"default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub",
|
||||||
|
"over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub",
|
||||||
|
"down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub",
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name" : "Active_Skill_Group_Name",
|
"name" : "Active_Skill_Group_Name",
|
||||||
"type" : "text",
|
"type" : "text",
|
||||||
|
|||||||
Reference in New Issue
Block a user