Bläddra i källkod

Cleaned up Camouflage to work as originally intended
Fixed offensive healing and cleaned up skill_calc_heal - Fixes bugreport:7317
Fixed Poison Mist to accurately display and damage correct area - Fixes bugreport:7600
Cleaning channel system update from r17284 and r17285 (lighta)
Updated CHN, SPN, IDN, FRN map_msg translations (Goddameit, Tragedy, Cydh, Capuche)
Follow up to r17228 - Removed map_msg lines related to deprecated @main chat
Fixed issues with clif_maptypeproperty2 and clif_dropfloorite (lighta) bugreport:7602 - bugreport:7603

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17296 54d463be-8e91-2dee-dedb-b68131a5f0ec

akinari1087 12 år sedan
förälder
incheckning
380bf896f0

+ 3 - 3
conf/battle/client.conf

@@ -98,15 +98,15 @@ save_clothcolor: yes
 wedding_ignorepalette: no
 
 // Do not display cloth colors for the Xmas class?
-// Set this to yes if your cloth palettes pack doesn't has Xmas palettes (or has less than the other jobs)
+// Set this to yes if your cloth palettes pack doesn't have Xmas palettes (or has less than the other jobs)
 xmas_ignorepalette: no
 
 // Do not display cloth colors for the Summer class?
-// Set this to yes if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs)
+// Set this to yes if your cloth palettes pack doesn't have Summer palettes (or has less than the other jobs)
 summer_ignorepalette: no
 
 // Do not display cloth colors for the Hanbok class?
-// Set this to yes if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs)
+// Set this to yes if your cloth palettes pack doesn't have Hanbok palettes (or has less than the other jobs)
 hanbok_ignorepalette: no
 
 // Set this to 1 if your clients have langtype problems and can't display motd properly

+ 47 - 57
conf/msg_conf/map_msg.conf

@@ -386,16 +386,7 @@
 375:  <- Player %s has left the duel --
 376:  -> Player %s has accepted the duel --
 377:  -- Player %s has rejected the duel --
-// Main chat
-380: Main chat has been activated.
-381: Main chat already activated.
-382: Main chat has been disabled.
-383: Main chat already disabled.
-384: Main chat is currently enabled. Usage: @main <on|off>, @main <message>.
-385: Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
-386: %s :Main: %s
-387: You cannot use Main chat while muted.
-388: You should enable main chat with "@main on" command.
+//378-389 free
 //NoAsk
 390: Autorejecting is activated.
 391: Autorejecting is deactivated.
@@ -456,7 +447,7 @@
 // Messages of others (not for GM commands)
 // ----------------------------------------
 
-//500: FREE
+//500 free
 501: Your account time limit is: %d-%m-%Y %H:%M:%S.
 502: Day Mode is activated
 503: Night Mode is activated
@@ -471,7 +462,7 @@
 // Trade Spoof Messages
 507: This player has been banned for %d minute(s).
 508: This player hasn't been banned (Ban option is disabled).
-//509 Available....
+//509 free
 
 // mail system
 //----------------------
@@ -569,8 +560,8 @@
 616: Taekwon
 617: Star Gladiator
 618: Soul Linker
-//619: FREE
-//620: FREE
+//619 free
+//620 free
 621: Summer
 622: Gangsi
 623: Death Knight
@@ -1421,10 +1412,10 @@
 1398: -- Displaying first %d partial matches:
 
 // @channel
-1399: Unknown Channel (usage: %s <#channel_name>)
-1400: Unknown Channel '%s' (usage: %s <#channel_name>)
-1401: '%s' Channel is password protected (usage: %s <#channel_name> <password>)
-1402: You're not in that channel, type '@join <#channel_name>'
+1399: Unknown channel (usage: %s <#channel_name>).
+1400: Unknown channel '%s' (usage: %s <#channel_name>).
+1401: Channel '%s' is password-protected (usage: %s <#channel_name> <password>).
+1402: You're not in that channel (use '@join <#channel_name>').
 1403: You're now in the '%s' channel.
 1404: %s failed.
 1405: Channel name must start with '#'.
@@ -1458,48 +1449,47 @@
 1433: Your global chat is now unbinded from the '#%s' channel.
 1434: You're already in the '%s' channel.
 1435: You're now in the '#%s' channel for '%s'.
-1436: Channel password can't be higher then %d.
-1437: Player '%s' has now been banned from '%s' channel
-1438: You cannot join the '%s' channel because you've been banned from it
-1439: Channel '%s' has no banned players
-1440: Player '%s' is not banned from this channel
-1441: Player '%s' has now been unbanned from the '%s' channel
-1442: Removed all bans from '%s' channel
-1443:  -- '%s' ban list
-1444: - %d: %s
+1436: Channel password can't be over %d characters.
+1437: Player '%s' is banned from the '%s' channel.
+1438: You're currently banned from the '%s' channel.
+1439: Channel '%s' contains no banned players.
+1440: Player '%s' is not banned from this channel.
+1441: Player '%s' is unbanned from the '%s' channel.
+1442: Cleared all bans from the '%s' channel.
+1443:  ---- '#%s' Ban List:
+//1444 free
 1445: - %s
-1446: You need to input a option
-1447: '%s' is not a known channel option
-1448: -- Available options
-1449: option '%s' is already enabled, if you'd like to disable it type '@channel setopt %s 0'
-1450: option '%s' is now enabled for channel '%s'
-1451: value '%d' for option '%s' is out of range (limit is 0-10)
-1452: option '%s' is now enabled for channel '%s' with %d seconds
-1453: option '%s' is now disabled for channel '%s'
-1454: option '%s' is now enabled for channel '%s'
+1446: You need to input an option.
+1447: Unknown channel option '%s'.
+1448: Channel '%s' deleted.
+1449: Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
+1450: Option '%s' is enabled for channel '%s'.
+1451: Value '%d' for option '%s' is out of range (limit 0-10).
+1452: Option '%s' is enabled for channel '%s' at %d seconds.
+1453: Option '%s' is disabled for channel '%s'.
+//1454 free
 1455: You're talking too fast!
-1456: -- %s ban <channel name> <character name>
-1457: - bans <character name> from <channel name> channel
-1458: -- %s banlist <channel name>
-1459: - lists all banned characters from <channel name> channel
-1460: -- %s unban <channel name> <character name>
-1461: - unban <character name> from <channel name> channel
-1462: -- %s setopt <channel name> <option name> <option value>
-1463: - adds or removes <option name> with <option value> to <channel name> channel
-1464: Ban failed, not possible to ban/unban this user.
-1465: Player '%s' is already banned from this channel
-1466: For '%s' you need the amount of seconds (from 0 to 10)
-1467: -- %s unbanall <channel name>
-1468: - unbans everyone from <channel name>
-1469: * %s delete <channel_name>
-1470: -- Force people leave and destroy the specified channel
+1456: * %s ban <#channel_name> <player>
+1457: -- Bans the specified player from the channel.
+1458: * %s banlist <#channel_name>
+1459: -- Lists all players banned from the specified channel.
+1460: * %s unban <#channel_name> <player>
+1461: -- Unbans the specified player from the channel.
+1462: * %s setopt <#channel_name> <option> <value>
+1463: -- Sets an option and value for the specified channel.
+1464: Ban failed for player '%s'.
+1465: Player '%s' is already banned from this channel.
+1466: Input the number of seconds (0-10) for the '%s' option.
+1467: * %s unbanall <#channel_name>
+1468: -- Clears all bans from the specified channel.
+1469: * %s delete <#channel_name>
+1470: -- Destroys the specified channel.
 1471: * %s list mine
-1472: -- List all your joined channel
-1473: * %s join <channel_name> <channel_password>
-1474: -- join specified channel
-1475: ---- Joined Channels ----
-1476: You have not joined any channel yet
-1477: Channel %s deleted
+1472: -- Lists all channels you have joined.
+1473: * %s join <#channel_name> <channel_password>
+1474: -- Joins the specified channel.
+1475: ---- My Channels ----
+1476: You have not joined any channels.
 
 //Custom translations
 //import: conf/msg_conf/import/map_msg_eng_conf.txt

+ 31 - 30
conf/msg_conf/map_msg_chn.conf

@@ -1,7 +1,7 @@
 // rAthena map_msg_chn.conf
 // Message Configuration
 // For translation, just change msg here (second line), no need to modify source code,
-// or alternatively, use conf/import/msg_conf.txt
+// or alternatively, use conf/msg_conf/import/map_msg_chn_conf.txt
 // Format:
 // // English message
 // msg_number: translated message
@@ -348,7 +348,7 @@
 332: 32個城堡
 333: 33個城堡
 // 334: Thirty-Four Castles
-324: 完全統治
+334: 完全統治
 
 // Templates for @who output
 343: 名字: %s
@@ -386,16 +386,7 @@
 375: <- 玩家 %s 已經離開決鬥 --
 376: -> 玩家 %s 已經接受決鬥 --
 377: -- 玩家 %s 已經拒絕決鬥 --
-// Main chat
-380: 主聊天功能正在啟動
-381: 主聊天功能已經啟動
-382: 主聊天功能正在被禁止
-383: 主聊天功能已經被禁止
-384: 當前可以使用主聊天功能用法: @main <on|off>, @main <訊息>.
-385: 當前不能使用主聊天功能用法: @main <on|off>, @main <訊息>.
-386: %s :Main: %s
-387: 禁言時不能使用主聊天功能
-388: 請使用 "@main on" 打開主聊天功能
+//378-389 free
 //NoAsk
 390: 自動拒絕功能啟動
 391: 自動拒絕功能關閉
@@ -443,10 +434,20 @@
 // Homunculus messages
 450: 你已經擁有一個人工生命體了
 
+// Return pet to egg message
+451: 你無法收回寵物,因為你身上沒有空間了
+
+// Message System
+460: 請輸入合法的語言 (usage: @langtype <language>).
+461: 語言現在被設定為 %s
+462: 這語言不被允許
+463: 訊息組態已被重新載入
+464: ---- 允許的語言:
+
 // Messages of others (not for GM commands)
 // ----------------------------------------
 
-//500: FREE
+//500 free
 501: 您上次登入時間是: %d-%m-%Y %H:%M:%S
 502: 白晝到來了
 503: 夜晚降臨了
@@ -455,8 +456,8 @@
 504: 使用了%d卡普拉點數(%s)和%d現金點數(%s)。剩餘%d卡普拉點數和%d現金點數。
 505: 得到了%d現金點數。總共%d點數。
 506: 得到了%d卡普拉點數。總共%d點數。
-505: 失去了%d現金點數。總共%d點數。
-506: 失去了%d卡普拉點數。總共%d點數。
+410: 失去了%d現金點數。總共%d點數。
+411: 失去了%d卡普拉點數。總共%d點數。
 
 // Trade Spoof Messages
 507: 此玩家被禁止發言 %d 分鐘
@@ -559,10 +560,10 @@
 616: 跆拳少年/少女
 617: 拳聖
 618: 悟靈士
-//619: FREE
-//620: FREE
-620: 忍者
-621: 夏裝
+//619 free
+//620 free
+621: 忍者
+622: 夏裝
 623: Death Knight
 624: Dark Collector
 625: 盧恩騎士
@@ -758,28 +759,28 @@
 1009: Please enter a status type/flag (用法: @displaystatus <status type> <flag> <tick> {<val1> {<val2> {<val3>}}}).
 
 // @stpoint
-1010: Please enter a number (用法: @stpoint <number of points>).
+1010: 請輸入有效數字 (用法: @stpoint <number of points>).
 
 // @skpoint
-1011: Please enter a number (用法: @skpoint <number of points>).
+1011: 請輸入有效數字 (用法: @skpoint <number of points>).
 
 // @zeny
 1012: 請輸入數量 (用法: @zeny <amount>).
 
 // @param
-1013: Please enter a valid value (用法: @str/@agi/@vit/@int/@dex/@luk <+/-adjustment>).
+1013: 請輸入有效數值 (用法: @str/@agi/@vit/@int/@dex/@luk <+/-adjustment>).
 
 // @guildlevelup
-1014: Please enter a valid level (用法: @guildlvup/@guildlvlup <# of levels>).
+1014: 請輸入有效等級 (用法: @guildlvup/@guildlvlup <# of levels>).
 
 // @makeeg
-1015: Please enter a monster/egg name/ID (用法: @makeegg <pet>).
+1015: 請輸入魔物\寵物蛋的名稱\ID (用法: @makeegg <pet>).
 
 // @petfriendly
-1016: Please enter a valid value (用法: @petfriendly <0-1000>).
+1016: 請輸入有效數值 (用法: @petfriendly <0-1000>).
 
 // @pethungry
-1017: Please enter a valid number (用法: @pethungry <0-100>).
+1017: 請輸入有效數字 (用法: @pethungry <0-100>).
 
 // @recall
 1018: 請輸入角色名稱 (用法: @recall <char name/ID>).
@@ -805,7 +806,7 @@
 1026: 請輸入角色名稱 (用法: @kick <char name/ID>).
 
 // @questskill / @lostskill
-1027: Please enter a quest skill number.
+1027: 請輸入任務技能的編號
 
 // @spiritball
 1028: 請輸入數量 (用法: @spiritball <number: 0-%d>).
@@ -817,11 +818,11 @@
 1030: 請輸入公會名稱 (用法: @guild <guild_name>).
 
 // @idsearch
-1031: Please enter part of an 物品名稱 (用法: @idsearch <part_of_item_name>).
+1031: 請輸入部分的物品名稱 (用法: @idsearch <part_of_item_name>).
 
 // @recallall / @guildrecall / @partyrecall
-1032: You are not authorized to warp somenone to your current map.
-1033: Because you are not authorized to warp from some maps, %d player(s) have not been recalled.
+1032: 你不被允許移動某人到你當前的地圖
+1033: 因為你不被允許移動某人到某地圖 %d 名玩家沒有被召回
 
 // @guildrecall
 1034: 請輸入公會名稱/ID (用法: @guildrecall <guild_name/ID>).

+ 60 - 27
conf/msg_conf/map_msg_frn.conf

@@ -386,16 +386,7 @@
 375:  <- Joueur %s quitte le duel --
 376:  -> Joueur %s accepte le duel --
 377:  -- Joueur %s rejete la demande de duel --
-// Main chat
-380: Chat principal activé.
-381: Chat principal déjà activé.
-382: Chat principal désactivé.
-383: Chat principal déjà désactivé.
-384: Chat principal activé. Usage: @main <on|off>, @main <message>.
-385: Chat principal désactivé. Usage: @main <on|off>, @main <message>.
-386: %s :Main: %s
-387: Vous ne pouvez pas utiliser le chat principal en étant mute.
-388: Activer le chat principal avec la commande "@main on".
+//378-389 free
 //NoAsk
 390: Rejet automatique activé.
 391: Rejet automatique désactivé.
@@ -429,20 +420,23 @@
 419: Serveur bloqué à cause de la surpopulation.
 420: Votre compte n'est plus autorisé.
 421: Votre compte est totallement supprimé.
-423: Compte bannie jusqu'à
+423: Compte banni jusqu'à
 424: Login-server demande de %s le Joueur '%.*s'.
 425: Le Joueur '%.*s' n'existe pas.
 426: Votre niveau de GM ne vous autorise pas à %s le Joueur '%.*s'.
 427: Login-server est déconnecté. Impossible de %s le Joueur '%.*s'.
 428: bloqué
-429: bannie
+429: banni
 430: débloqué
-431: débannie
+431: débanni
 432: change le genre de
 
 // Homunculus messages
 450: Vous possédez déjà un homunculus
 
+// Return pet to egg message
+451: Vous ne pouvez pas remettre votre pet dans son oeuf car votre inventaire est plein.
+
 // Message System
 460: Entrez une langue (usage: @langtype <langue>).
 461: La langue est maintenant en %s.
@@ -453,7 +447,7 @@
 // Autres Messages ( != GM commands)
 // ----------------------------------------
 
-//500: FREE
+//500 free
 501: La date limite de votre compte est: %d-%m-%Y %H:%M:%S.
 502: Le Mode Jour s'est activé
 503: Le Mode Nuit s'est activé
@@ -466,9 +460,9 @@
 411: Supprimé %d kafra points. Total: %d points.
 
 // Trade Spoof Messages
-507: Joueur bannie pendant %d minute(s).
-508: Joueur non-bannie (Option Ban désactivée).
-//509 Available....
+507: Joueur banni pendant %d minute(s).
+508: Joueur non-banni (Option Ban désactivée).
+//509 free
 
 // mail system
 //----------------------
@@ -566,8 +560,8 @@
 616: Taekwon
 617: Star Gladiator
 618: Soul Linker
-//619: FREE
-//620: FREE
+//619 free
+//620 free
 621: Summer
 622: Gangsi
 623: Death Knight
@@ -1417,14 +1411,12 @@
 // @skillid (extension)
 1398: -- Affichage des premiers %d de la recherche:
 
-// @join
-1399: Canal ('Channel') inconnu (usage: %s <#nom_canal>)
-1400: Canal ('Channel') inconnu '%s' (usage: %s <#nom_canal>)
-1401: Le Canal '%s' est protégé par un mot de passe (usage: %s <#nom_canal> <mot_de_passe>)
-1402: Vous n'êtes pas sur ce canal, taper '@join <#nom_canal>'
-1403: Vous êtes connecté(e) sur le Canal '%s'.
-
 // @channel
+1399: Canal ('Channel') inconnu (usage: %s <#nom_canal>).
+1400: Canal ('Channel') inconnu '%s' (usage: %s <#nom_canal>).
+1401: Le Canal '%s' est protégé par un mot de passe (usage: %s <#nom_canal> <mot_de_passe>).
+1402: Vous n'êtes pas sur ce canal, taper '@join <#nom_canal>'.
+1403: Vous êtes connecté(e) sur le Canal '%s'.
 1404: %s échoué.
 1405: Le nom du Canal doit commencer par '#'.
 1406: La longueur du nom du Canal doit être comprise entre 3 et %d.
@@ -1456,7 +1448,48 @@
 1432: Votre chat global n'est relié à aucun canal.
 1433: Votre chat global est maintenant délié du Canal '#%s'.
 1434: Vous êtes déjà sur le canal '%s'.
-1435: Vous entrez sur le Canal '#%s' de '%s'.
+1435: Vous êtes sur le Canal '#%s' à '%s'.
+1436: Le Mot de passe du Canal ne peut pas dépasser %d caractères.
+1437: Le Joueur '%s' est banni du canal '%s'.
+1438: Vous ne pouvez pas rejoindre le canal '%s', vous en êtes banni.
+1439: Le canal '%s' n'a aucun joueur banni.
+1440: Le joueur '%s' n'est pas banni de ce canal.
+1441: Le joueur '%s' n'est plus banni du canal '%s'
+1442: Liste des bannis du canal '%s' supprimée.
+1443:  ---- liste des bannis de '#%s':
+//1444 free
+1445: - %s
+1446: Veuillez entrer une option.
+1447: Option de canal '%s' inconnue.
+1448: Canal %s supprimé,
+1449: L'option '%s' est déjà activée, si vous souhaitez la désactiver entrez: '@channel setopt %s 0'.
+1450: Option '%s' maintenant activée sur le canal '%s'.
+1451: La valeur '%d' pour l'option '%s' est incorrecte (doit être comprise entre 0-10).
+1452: Option '%s' maintenant activée sur le canal '%s' avec %d secondes.
+1453: Option '%s' maintenant désactivée sur le canal '%s'.
+//1454 free
+1455: Vous parlez trop rapidement!
+1456: * %s ban <#nom_canal> <nom du personnage>
+1457: -- Banni <nom du personnage> du canal <#nom_canal>
+1458: * %s banlist <#nom_canal>
+1459: -- Listes de tous les personnages bannis du canal <#nom_canal>
+1460: * %s unban <#nom_canal> <nom du personnage>
+1461: -- Débanni <nom du personnage> du canal <#nom_canal>
+1462: * %s setopt <#nom_canal> <nom de l'option> <valeur de l'option>
+1463: -- Ajoute ou supprime <nom option> avec <valeur de l'option> du canal <#nom_canal>
+1464: Ban échoué, impossible de bannir/débannir cet utilisateur.
+1465: Le joueur '%s' est déjà banni de ce canal.
+1466: Pour '%s' vous avez besoin de la quantité de secondes (0 à 10 secs)
+1467: * %s unbanall <#nom_canal>
+1468: -- Débanni tous les bannis du canal <#nom_canal>
+1469: * %s delete <#nom_canal>
+1470: -- Force les utilisateurs à sortir du canal et supprime le canal spécifié
+1471: * %s list mine
+1472: -- Liste tous les canaux rejoins
+1473: * %s join <#nom_canal> <mot de passe du canal>
+1474: -- joindre le canal spécifié
+1475: ---- Canaux rejoins ----
+1476: Vous n'avez rejoins aucun canal.
 
 //Custom translations
 //import: conf/msg_conf/import/map_msg_frn_conf.txt

+ 73 - 40
conf/msg_conf/map_msg_idn.conf

@@ -1,19 +1,19 @@
 // rAthena map_msg_idn.conf
-// Pengaturan pesan
-// Diterjemahkan oleh [Cydh] dan [nanakiwurtz]
-// Untuk terjemahan, cukup ubah pesan di sini (pada baris ke-2), tidak perlu mengubah source code,
-// atau dapat dilakukan dengan cara lain, menggunakan conf/import/msg_conf.txt
+// Pengaturan pesan. Diterjemahkan oleh [Cydh] dan [nanakiwurtz]
+// Untuk terjemahan, cukup ubah pesan di sini (pada baris setelah pesan asli), tidak perlu mengubah source code,
+// atau dapat dilakukan dengan cara lain, gunakan conf/msg_conf/import/map_msg_idn_conf.txt
 // Format penulisan:
+// //nomor_pesan: pesan asli
 // nomor_pesan: pesan yang diterjemahkan
 
-//   0-410: untuk perintah GM
-// 500-900 untuk lainnya
+//   0-410: digunakan untuk perintah GM
+// 500-900: digunakan untuk pesan lainnya
 // 900-1300: @atcommand
 
-// Untuk meniadakan sebuah string (%s), maka jadikan maks. panjang string tersebut menjadi 0.
+// Untuk meniadakan sebuah string (%s), maka jadikan panjang string maksimal tersebut menjadi 0.
 // contoh:
 // 270: *%s %s* (@me format)
-// 270: *%.0s%s* (menghilangkan nama karakter dari pesan tersebut)
+// 270: *%.0s%s* (menghilangkan nama karakter dari @me)
 
 // Pesan dari perintah GM
 // -----------------------
@@ -349,14 +349,14 @@
 // 334: Tigapuluh Empat Kastil
 334: Mendominasi Total!
 
-// Contoh untuk keluaran @who
+// Contoh untuk hasil @who
 343: Nama: %s 
 344: (%s) 
 345: | Party: '%s' 
 346: | Guild: '%s'
-//Kamu mungkin menghilangkan %s terakhir, kemudian kamu tidak akan melihat nama job pemain.
+//Kamu mungkin menghilangkan '%s' terakhir, hasilnya kamu tidak akan melihat nama job pemain.
 347: | Lv:%d/%d | Job: %s
-//Kamu mungkin menghilangkan %d terakhir, kemudian kamu tidak akan koordinat pemain, hanya nama map.
+//Kamu mungkin menghilangkan 2 '%d' terakhir, hasilnya tidak akan koordinat pemain, hanya nama map.
 348: | Lokasi: %s %d %d
 
 // @duel (bagian 1)
@@ -385,16 +385,7 @@
 375:  <- Pemain %s meninggalkan duel --
 376:  -> Pemain %s telah menerima permintaan duel --
 377:  -- Pemain %s telah menolak permintaan duel --
-// Main chat
-380: Main chat telah diaktifkan.
-381: Main chat sudah aktif..
-382: Main chat telah dimatikan..
-383: Main chat sudah dimatikan.
-384: Main chat saat ini tersedia. Penggunaan: @main <on|off>, @main <pesan>.
-385: Main chat saat ini dimatikan. Penggunaan: @main <on|off>, @main <pesan>.
-386: %s :Main: %s
-387: Kamu tidak dapat menggunakan obrolan 'Main' ketika bisu.
-388: Kamu sebaiknya mengaktifkan obrolan utama dengan perintah "@main on".
+//378-389 kosong
 //NoAsk
 390: Penolakan otomatis diaktifkan.
 391: Penolakan otomatis ditidakaktifkan.
@@ -442,6 +433,9 @@
 // Pesan-pesan untuk Homunculus
 450: Kamu sudah memiliki homunculus
 
+// Pesan tentang mengembalikan peliharaan ke telur
+451: Kamu tidak dapat mengembalikan peliharaan kamu karena inventory penuh.
+
 // Sistem Pesan
 460: Harap masukkan tipe bahasa yang valid. (Penggunaan: @langtype <bahasa>).
 461: Bahasa saat ini dipilih menjadi %s.
@@ -452,7 +446,7 @@
 // Pesan-pesan untuk keperluan lain (Bukan untuk perintah GM)
 // ----------------------------------------
 
-//500: KOSONG
+//500: kosong
 501: Batas akun kamu adalah: %d-%m-%Y %H:%M:%S.
 502: Mode siang diaktifkan.
 503: Mode malam diaktifkan.
@@ -564,8 +558,8 @@
 616: Taekwon
 617: Star Gladiator
 618: Soul Linker
-//619: KOSONG
-//620: KOSONG
+//619: kosong
+//620: kosong
 621: Summer
 622: Gangsi
 623: Death Knight
@@ -700,7 +694,7 @@
 // @jobchange
 922: Harap masukkan ID Job.
 923: Kamu tidak bisa berganti job menggunakan perintah ini.
-//924-979 KOSONG (Masih kosong, dipakai untuk job-job berikutnya)
+//924-979 kosong (Masih kosong, dipakai untuk job-job berikutnya)
 
 // @kami
 980: Harap masukkan pesan (Penggunaan: @kami <pesan>).
@@ -1361,19 +1355,19 @@
 
 // @accinfo
 1365: Penggunaan: @accinfo/@accountinfo <id_akun/nama karakter>
-1366: Kamu diperbolehkan mencari bagian nama dengan menggunakan '%' dalam pencarian, misal. "@accinfo %Mario%" akan menampilkan daftar semua karakter dengan nama "Mario".
+1366: Kamu boleh mencari bagian nama dengan menggunakan '%' dalam pencarian, misal "@accinfo %Mario%" akan menampilkan daftar semua karakter dengan nama "Mario".
 
 // @set
 1367: Penggunaan: @set <nama variable> <nilai>
-1368: Penggunaan: ex. "@set PoringCharVar 50"
-1369: Penggunaan: ex. "@set PoringCharVarSTR$ Super Duper String"
-1370: Penggunaan: ex. "@set PoringCharVarSTR$" menghasilkan nilainya, Super Duper String.
-1371: Variabel pada NPC tidak mungkin digunakan dengan @set.
-1372: Variabel instanis tidak mungkin digunakan dengan @set.
-1373: Nilai %s saat ini :%d
-1374: Nilai %s saat ini :%s
+1368: Contoh penggunaan: "@set PoringCharVar 50"
+1369: Contoh penggunaan: "@set PoringCharVarSTR$ Super Duper String"
+1370: Contoh penggunaan: "@set PoringCharVarSTR$" menampilkan nilainya, Super Duper String.
+1371: Variabel pada NPC tidak boleh digunakan dengan @set.
+1372: Variabel instansi tidak boleh digunakan dengan @set.
+1373: Nilai %s saat ini: %d
+1374: Nilai %s saat ini: %s
 1375: %s kosong
-1376: Jenis data %s tidak didukung :%u
+1376: Jenis data %s tidak didukung: %u
 
 // @reloadquestdb
 1377: Database Quest sudah dimuat ulang.
@@ -1415,14 +1409,12 @@
 // @skillid (tambahan)
 1398: -- Menampilkan %d bagian pertama yang cocok:
 
-// @join
+// @channel
 1399: Channel tidak diketahui. (Penggunaan: %s <#nama_channel>)
 1400: Channel '%s' tidak diketahui. (Penggunaan: %s <#nama_channel>)
 1401: Channel '%s' menggunakan password. (Penggunaan: %s <#nama_channel> <password>)
 1402: kamu tidak berada di channel tersebut, ketikkan '@join <#nama_channel>'
 1403: Kamu sekarang berada di channel '%s'.
-
-// @channel
 1404: %s gagal.
 1405: Nama Channel harus dimulai dengan '#'.
 1406: Panjang nama channel harus di antara 3 dan %d.
@@ -1446,7 +1438,7 @@
 1424: -- Meninggalkan channel yang ditentukan.
 1425: Kamu bukan bagian dari channel '%s'.
 1426: Kamu meninggalkan channel '%s'.
-1427: * %s bindto <#name_channel>
+1427: * %s bindto <#nama_channel>
 1428: -- Mengikat chat globalmu ke channel yang ditentukan, mengirim semua pesan global ke channel tersebut.
 1429: * %s unbind
 1430: -- Melepaskan chat globalmu dari channel yang diikuti, jika ada.
@@ -1455,6 +1447,47 @@
 1433: Chat globalmu sudah dilepaskan dari channel '#%s'.
 1434: Kamu telah berada di channel '%s'.
 1435: Kamu sekarang berada di channel '#%s' untuk '%s'.
-
-//Bila ada terjemahan lain, cukup tulis di file conf/import/msg_conf.txt
+1436: Password channel tidak dapat lebih banyak dari %d.
+1437: Pemain '%s' sekarang telah diban dari channel '%s'.
+1438: Kamu tidak dapat bergabung di channel '%s' karena kamu telah diban dari channel tersebut.
+1439: Channel '%s' tidak memiliki pemain yang diban.
+1440: Pemain '%s' tidak diban dari channel ini.
+1441: Pemain '%s' sudah diunban dari channel '%s' saat ini.
+1442: Menghilangkan semua 'ban' dari channel '%s'.
+1443:  ---- Daftar 'ban' '#%s':
+//1444 kosong
+1445: - %s
+1446: Kamu butuh untuk memasukkan pilihan.
+1447: '%s' adalah pilihan channel yang tidak diketahui.
+1448: Channel %s dihapus.
+1449: Pilihan '%s' sudah diaktifkan, jika kamu ingin mematikannya ketik '@channel setopt %s 0'.
+1450: Pilihan '%s' saat ini diaktifkan untuk channel '%s'.
+1451: Nilai '%d' keluar dari batas untuk option '%s' (batasnya 0-10).
+1452: Pilihan '%s' sekarang diaktifkan untuk channel '%s' dalam %d detik.
+1453: Pilihan '%s' sekarang dimatikan untuk channel '%s'.
+//1454 kosong
+1455: Kamu berbicara terlalu cepat!
+1456: * %s ban <#nama_channel> <nama karakter>
+1457: -- ban <nama karakter> dari channel <#nama_channel>
+1458: * %s banlist <#nama_channel>
+1459: -- daftar semua pemain yang diban dari channel <#nama_channel>
+1460: * %s unban <#nama_channel> <nama karakter>
+1461: -- unban <nama karakter> dari channel <#nama_channel>
+1462: * %s setopt <#nama_channel> <nama pilihan> <nilai pilihan>
+1463: -- menambahkan atau mengurangi <nama pilihan> dengan <nilai pilihan> untuk channel <#nama_channel>
+1464: 'Ban' gagal, tidak mungkin untuk 'ban'/'unban' pengguna ini.
+1465: Pemain '%s' sudah diban dari channel ini.
+1466: Untuk '%s' kamu membutuhkan jumlah dalam detik (dari 0 sampai 10)
+1467: * %s unbanall <#nama_channel>
+1468: -- 'unban' semua orang dari <#nama_channel>
+1469: * %s delete <#nama_channel>
+1470: -- Memaksa pemain meninggalkan channel dan menghilangkan channel yang ditentukan.
+1471: * %s list mine
+1472: -- Daftar semua channel yang kamu ikuti.
+1473: * %s join <#nama_channel> <password_channel>
+1474: -- bergabung ke channel yang ditentukan
+1475: ---- Channel yang diikuti ----
+1476: Kamu tidak bergabung ke channel manapun saat ini.
+
+//Bila ada terjemahan lain
 //import: conf/msg_conf/import/map_msg_idn_conf.txt

+ 5 - 14
conf/msg_conf/map_msg_por.conf

@@ -391,16 +391,7 @@
 375:  <- Jogador %s abandonou o duelo --
 376:  -> Jogador %s aceitou o desafio --
 377:  -- Jogador %s não aceitou o desafio --
-// Chat principal
-380: Chat principal ativado.
-381: Chat principal já está ativado.
-382: Chat principal desativado.
-383: Chat principal já está desativado.
-384: Chat principal atualmente ativado. Uso: @main <on|off>, @main <mensagem>.
-385: Chat principal atualmente desativado. Uso: @main <on|off>, @main <mensagem>.
-386: %s :Main: %s
-387: Você não pode usar o Chat principal enquanto estiver mutado.
-388: Você pode habilitar o chat principal pelo comando "@main on".
+//378-389 livre
 //NoAsk
 390: Autorejeição ativada.
 391: Autorejeição desativada.
@@ -461,7 +452,7 @@
 // Mensagens para outros (não para comandos de Game Master)
 // ----------------------------------------
 
-//500: LIVRE
+//500 livre
 501: A sua conta expira em: %d-%m-%Y %H:%M:%S.
 502: Está de dia
 503: Está de noite
@@ -570,8 +561,8 @@
 616: Taekwon
 617: Mestre Taekwon
 618: Espiritualista
-//619: LIVRE
-//620: LIVRE
+//619 livre
+//620 livre
 621: Praia
 622: Gangsi
 623: Cavaleiro Sombrio
@@ -637,7 +628,7 @@
 678: Você não é mais o líder do clã.
 679: Você se tornou o líder do clã!
 680: Você recuperou-se!
-//681-899 free
+//681-899 livre
 
 681: Cavaleiro Rúnico T
 682: Arcano T

+ 4 - 13
conf/msg_conf/map_msg_rus.conf

@@ -390,16 +390,7 @@
 376:  -> Игрок %s принял приглашение --
 377:  -- Игрок %s отверг приглашение --
 
-// Сообщения команд Общего чата
-380: Общий чат включен.
-381: Общий чат уже включен.
-382: Общий чат выключен.
-383: Общий чат уже выключен.
-384: Общий чат включен. Использование: @main <on|off>, @main <сообщение>.
-385: Общий чат выключен. Использование: @main <on|off>, @main <сообщение>.
-386: %s :Общий: %s
-387: Вы не можете использовать Общий чат, когда вы безмолвны.
-388: Вы должны включить Общий чат через команду "@main on".
+//378-389 НЕ ИСПОЛЬЗУЕТСЯ
 
 // Сообщения команды @NoAsk
 390: Автоматический отказ включен.
@@ -459,7 +450,7 @@
 // ----------------------------------------
 // Остальные сообщения
 // ----------------------------------------
-//500: НЕ ИСПОЛЬЗУЕТСЯ
+//500 НЕ ИСПОЛЬЗУЕТСЯ
 501: Срок действия вашего аккаунта: %d-%m-%Y %H:%M:%S.
 502: Наступил день
 503: Наступила ночь
@@ -571,8 +562,8 @@
 616: Taekwon
 617: Star Gladiator
 618: Soul Linker
-//619: НЕ ИСПОЛЬЗУЕТСЯ
-//620: НЕ ИСПОЛЬЗУЕТСЯ
+//619 НЕ ИСПОЛЬЗУЕТСЯ
+//620 НЕ ИСПОЛЬЗУЕТСЯ
 621: Summer
 622: Gangsi
 623: Death Knight

+ 56 - 25
conf/msg_conf/map_msg_spn.conf

@@ -1,7 +1,7 @@
 // rAthena map_msg_spn.conf
 // Message Configuration
 // For translation, just change msg here (second line), no need to modify source code,
-// or alternatively, use conf/import/msg_conf.txt
+// or alternatively, use conf/import/map_msg_spn_conf.txt
 // Format:
 // // English message
 // msg_number: translated message
@@ -392,16 +392,7 @@
 375:  <- El jugador %s ha abandonado el duelo --
 376:  -> El jugador %s ha aceptado el duelo --
 377:  -- El jugador %s ha rechazado el duelo --
-// Main chat
-380: Se ha activado el Main chat.
-381: El Main chat ya está activo.
-382: Se ha desactivado el Main chat.
-383: El Main chat ya está desactivado.
-384: El Main chat está activado en estos instantes. Uso: @main <on|off>, @main <mensaje>.
-385: El Main chat está desactivado en estos instantes. Uso: @main <on|off>, @main <mensaje>.
-386: %s :Main: %s
-387: No puedes usar el Main chat mientras estás muteado.
-388: Deberías activar el Main chat usando el comando "@main on".
+//378-389 free
 //NoAsk
 390: Se ha activado el autoreject.
 391: Se ha desactivado el autoreject.
@@ -434,7 +425,7 @@
 417: Tu archivo EXE del juego no es el de la última versión.
 418: Se ha prohibido el log in de tu cuenta.
 419: El servidor está sobrecargado por sobrepoblación.
-//para 420: No sé si esta traducción refleja lo que se quería decir. Vaya inglés...
+//NdT 420: No sé si esta traducción refleja lo que se quería decir. Vaya inglés...
 420: Tu cuenta no tiene más autorización.
 421: Tu cuenta ha sido totalmente borrada.
 423: Tu cuenta ha sido baneada hasta el 
@@ -451,8 +442,8 @@
 // Homunculus messages
 450: Ya tienes un homúnculo.
 
-// Return pet to egg message
-451: No puedes retornar tu pet porque tu inventory está llena.
+// Return pet to egg message 	
+451: No puedes devolver tu pet al huevo porque tu inventario está lleno.
 
 // Message System
 460: Por favor, especifica una lengua válida (uso: @langtype <lengua>).
@@ -464,7 +455,7 @@
 // Messages of others (not for GM commands)
 // ----------------------------------------
 
-//500: FREE
+//500 free
 501: El límite de tiempo de tu cuenta es: %d-%m-%Y %H:%M:%S.
 502: El Modo Día está activo
 503: El Modo Noche está activo
@@ -578,8 +569,8 @@
 616: Taekwon
 617: Star Gladiator
 618: Soul Linker
-//619: FREE
-//620: FREE
+//619 free
+//620 free
 621: Summer
 622: Gangsi
 623: Death Knight
@@ -1044,7 +1035,8 @@
 
 // @skilltree
 1167: Uso: @skilltree <ID skill> <objetivo>
-1168: El jugador está usando el árbol de skills de %s (%d puntos de basic skill).
+//NdT 1168: No estoy seguro de que sea correcta
+1168: El jugador está usando el skill tree de %s (%d puntos de basic skill).
 1169: El jugador no puede usar la skill indicada.
 1170: El jugador necesita el nivel %d de la skill %s.
 1171: El jugador tiene todos los requisitos para la skill indicada.
@@ -1432,14 +1424,12 @@
 // @skillid (extension)
 1398: -- Se muestran las primeras %d coincidencias parciales:
 
-// @join
-1399: Canal Desconocido (uso: %s <#nombre_canal>)
-1400: Se desconoce el canal '%s' (uso: %s <#nombre_canal>)
-1401: El canal '%s' está protegido por contraseña (uso: %s <#nombre_canal> <contraseña>)
-1402: No estás en ese canal. Para entrar, escribe '@join <#nombre_canal>'
-1403: Estás ahora en el canal '%s'.
-
 // @channel
+1399: Canal Desconocido (uso: %s <#nombre_canal>).
+1400: Se desconoce el canal '%s' (uso: %s <#nombre_canal>).
+1401: El canal '%s' está protegido por contraseña (uso: %s <#nombre_canal> <contraseña>).
+1402: No estás en ese canal. Para entrar, escribe '@join <#nombre_canal>'.
+1403: Estás ahora en el canal '%s'.
 1404: %s fallido.
 1405: El nombre del canal debe empezar por '#'.
 1406: El nombre del canal debe tener entre 3 y %d caracteres.
@@ -1472,6 +1462,47 @@
 1433: Tu chat global ya no está unido al canal '%s'.
 1434: Ya estás en el canal '%s'.
 1435: Estás ahora en el canal '#%s' gracias a '%s'.
+1436: La contraseña del canal no puede ser mas grande que %d.
+1437: El jugador '%s' ha sido banneado del canal '%s'
+1438: No puedes ingresar al canal '%s' por que estás banneado.
+1439: El canal '%s' no tiene ningún jugador banneado.
+1440: El jugador '%s' no esta banneado de este canal.
+1441: El jugador '%s' ha sido desbanneado del canal '%s'
+1442: Removidos todos los banneados del canal '%s'
+1443: ---- '#%s' Lista de banneados:
+//1444 free
+1445: - %s
+1446: Necesitas ingresar una opción.
+1447: '%s' Es una opción invalida.
+1448: Canal %s eliminado.
+1449: Opción '%s' está activada, si deseas desactivarla escribe '@channel setopt %s 0'.
+1450: Opción '%s' está activada para el canal '%s'.
+1451: Valores '%d' de la opción '%s' está fuera del rango (El limite es 0-10).
+1452: Opción '%s' está activada para el canal '%s' con %d segundos.
+1453: Opción '%s' está desactivada para el canal '%s'.
+//1454 free
+1455: Estás hablando muy rápido!
+1456: * %s ban <#nombre_canal> <character name>
+1457: -- Bans <character name> del canal <#nombre_canal>
+1458: * %s banlist <#nombre_canal>
+1459: -- Lista de todos los jugadores banneados del canal <#nombre_canal>
+1460: * %s desbannear <#nombre_canal> <character name>
+1461: -- Desbannear <character name> del canal <channel name>
+1462: * %s setopt <#nombre_canal> <option name> <option value>
+1463: -- Añade o remueve <option name> con <option value> del canal <#nombre_canal>
+1464: No es posible banear o desbannear a este jugador
+1465: El jugador '%s' ya esta banneado de este canal
+1466: Para '%s' necesitas una cantidad de segundos (De 0 a 10)
+1467: * %s unbanall <#nombre_canal>
+1468: -- Desbaneados todos del canal <#nombre_canal>
+1469: * %s delete <#nombre_canal>
+1470: -- Fuerza a los jugadores para dejar y destruir un canal especific.
+1471: * %s list mine
+1472: -- Lista de todos tus canales ingresados
+1473: * %s ingresa <#nombre_canal> <channel_password>
+1474: -- Ingresado a un canal especifico.
+1475: ---- Canales ingresados ----
+1476: No has entrado a ningún canal todavía.
 
 //Custom translations
 //import: conf/msg_conf/import/map_msg_spn_conf.txt

+ 1 - 1
db/re/skill_unit_db.txt

@@ -160,7 +160,7 @@
 3020,0xf8,    ,  0, 3, 100,all, 0x018	//KO_ZENKAI
 3010,0xfc,    ,  0, 1,1000,enemy, 0x020	//KO_MAKIBISHI
 
-8020,0xf5,    ,  0, 3,2300:2100:1900:1700:1500,enemy,   0x018	//MH_POISON_MIST
+8020,0xf5,    ,  3, 0,2300:2100:1900:1700:1500,enemy,   0x018	//MH_POISON_MIST
 8033,0x7e,    ,  0, 0,  -1,all,   0x003	//MH_STEINWAND
 8025,0x86,    ,  0, 2:2:3:3:4,1000,enemy, 0x018	//MH_XENO_SLASHER
 8041,0xf6,    ,  1:1:2:2:3, 0,2000,enemy,   0x01A	//MH_LAVA_SLIDE

+ 26 - 20
src/map/atcommand.c

@@ -1482,8 +1482,10 @@ ACMD_FUNC(pvpoff)
 
 	map[sd->bl.m].flag.pvp = 0;
 
-	if (!battle_config.pk_mode)
+	if (!battle_config.pk_mode){
 		clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
+		clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
+	}
 	map_foreachinmap(atcommand_pvpoff_sub,sd->bl.m, BL_PC);
 	map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
 	clif_displaymessage(fd, msg_txt(sd,31)); // PvP: Off.
@@ -1518,9 +1520,9 @@ ACMD_FUNC(pvpon)
 
 	map[sd->bl.m].flag.pvp = 1;
 
-	if (!battle_config.pk_mode)
-	{// display pvp circle and rank
+	if (!battle_config.pk_mode) {// display pvp circle and rank
 		clif_map_property_mapall(sd->bl.m, MAPPROPERTY_FREEPVPZONE);
+		clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
 		map_foreachinmap(atcommand_pvpon_sub,sd->bl.m, BL_PC);
 	}
 
@@ -1543,6 +1545,7 @@ ACMD_FUNC(gvgoff)
 
 	map[sd->bl.m].flag.gvg = 0;
 	clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
+	clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
 	map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
 	clif_displaymessage(fd, msg_txt(sd,33)); // GvG: Off.
 
@@ -1563,6 +1566,7 @@ ACMD_FUNC(gvgon)
 
 	map[sd->bl.m].flag.gvg = 1;
 	clif_map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE);
+	clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
 	clif_displaymessage(fd, msg_txt(sd,34)); // GvG: On.
 
 	return 0;
@@ -8765,7 +8769,7 @@ ACMD_FUNC(join){
 	char chname[CHAN_NAME_LENGTH], pass[CHAN_NAME_LENGTH];
 
 	if( !message || !*message || sscanf(message, "%s %s", chname, pass) < 1 ) {
-		sprintf(atcmd_output, msg_txt(sd,1399),command); // Unknown Channel (usage: %s <#channel_name>)
+		sprintf(atcmd_output, msg_txt(sd,1399),command); // Unknown channel (usage: %s <#channel_name>).
 		clif_displaymessage(fd, atcmd_output);
 		return -1;
 	}
@@ -8791,9 +8795,9 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
 
 	//option delete
 	if(can_delete){
-		sprintf(atcmd_output, msg_txt(sd,1469),command);// * %s delete <channel_name>
+		sprintf(atcmd_output, msg_txt(sd,1469),command);// * %s delete <#channel_name>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1470)); // -- Force people leave and destroy the specified channel
+		clif_displaymessage(fd, msg_txt(sd,1470)); // -- Destroys the specified channel.
 	}
 
 	//option list
@@ -8802,7 +8806,7 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
 	clif_displaymessage(fd, msg_txt(sd,1418));// -- Lists all public channels.
 	sprintf(atcmd_output, msg_txt(sd,1471),command);// * %s list mine
 	clif_displaymessage(fd, atcmd_output);
-	clif_displaymessage(fd, msg_txt(sd,1472));
+	clif_displaymessage(fd, msg_txt(sd,1472));// -- Lists all channels you have joined.
 	if( can_create ) {
 		sprintf(atcmd_output, msg_txt(sd,1419),command);// * %s list colors
 		clif_displaymessage(fd, atcmd_output);
@@ -8817,9 +8821,9 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
 	}
 
 	//option join
-	sprintf(atcmd_output, msg_txt(sd,1473),command);// * %s join <channel_name>
+	sprintf(atcmd_output, msg_txt(sd,1473),command);// * %s join <#channel_name> <channel_password>
 	clif_displaymessage(fd, atcmd_output);
-	clif_displaymessage(fd, msg_txt(sd,1474));
+	clif_displaymessage(fd, msg_txt(sd,1474));// -- Joins the specified channel.
 
 	//option leave
 	sprintf(atcmd_output, msg_txt(sd,1423),command);// * %s leave <#channel_name>
@@ -8838,25 +8842,25 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
 
 	//option ban/unban/banlist
 	if( can_create ) {
-		sprintf(atcmd_output, msg_txt(sd,1456),command);// -- %s ban <channel name> <character name>
+		sprintf(atcmd_output, msg_txt(sd,1456),command);// * %s ban <#channel_name> <player>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1457));// - bans <character name> from <channel name> channel
-		sprintf(atcmd_output, msg_txt(sd,1458),command);// -- %s banlist <channel name>
+		clif_displaymessage(fd, msg_txt(sd,1457));// -- Bans the specified player from the channel.
+		sprintf(atcmd_output, msg_txt(sd,1458),command);// * %s banlist <#channel_name>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1459));// - lists all banned characters from <channel name> channel
-		sprintf(atcmd_output, msg_txt(sd,1460),command);// -- %s unban <channel name> <character name>
+		clif_displaymessage(fd, msg_txt(sd,1459));// -- Lists all players banned from the specified channel.
+		sprintf(atcmd_output, msg_txt(sd,1460),command);// * %s unban <#channel_name> <player>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1461));// - unban <character name> from <channel name> channel
-		sprintf(atcmd_output, msg_txt(sd,1467),command);// -- %s unbanall <channel name>
+		clif_displaymessage(fd, msg_txt(sd,1461));// -- Unbans the specified player from the channel.
+		sprintf(atcmd_output, msg_txt(sd,1467),command);// * %s unbanall <#channel_name>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1468));// - unbans everyone from <channel name>
+		clif_displaymessage(fd, msg_txt(sd,1468));// -- Clears all bans from the specified channel.
 	}
 
 	//option setopt
 	if(can_create){
-		sprintf(atcmd_output, msg_txt(sd,1462),command);// -- %s setopt <channel name> <option name> <option value>
+		sprintf(atcmd_output, msg_txt(sd,1462),command);// * %s setopt <#channel_name> <option> <value>
 		clif_displaymessage(fd, atcmd_output);
-		clif_displaymessage(fd, msg_txt(sd,1463));// - adds or removes <option name> with <option value> to <channel name> channel
+		clif_displaymessage(fd, msg_txt(sd,1463));// -- Sets an option and value for the specified channel.
 	}
 
 	sprintf(atcmd_output, msg_txt(sd,1404),command); // %s failed.
@@ -8874,7 +8878,7 @@ ACMD_FUNC(channel) {
 
 	if( strcmpi(key,"create") == 0 && ( Channel_Config.user_chenable || pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) ) ) {
 		if(sub3[0] != '\0'){
-			clif_displaymessage(fd, msg_txt(sd,1408)); // Channel password may not contain spaces
+			clif_displaymessage(fd, msg_txt(sd,1408)); // Channel password may not contain spaces.
 			return -1;
 		}
 		return channel_pccreate(sd,sub1,sub2);
@@ -8894,6 +8898,8 @@ ACMD_FUNC(channel) {
 		return channel_pcunbind(sd);
 	} else if ( strcmpi(key,"ban") == 0 ) {
 		return channel_pcban(sd,sub1,map_nick2sd(sub2),0);
+	} else if ( strcmpi(key,"banlist") == 0 ) {
+		return channel_pcban(sd,sub1,NULL,3);
 	} else if ( strcmpi(key,"unban") == 0 ) {
 		return channel_pcban(sd,sub1,map_nick2sd(sub2),1);
 	} else if ( strcmpi(key,"unbanall") == 0 ) {

+ 3 - 3
src/map/battle.c

@@ -1924,7 +1924,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				cri += sd->bonus.arrow_cri;
 		}
 		if( sc && sc->data[SC_CAMOUFLAGE] )
-			cri += 10 * (10-sc->data[SC_CAMOUFLAGE]->val4);
+			cri += 10 * sc->data[SC_CAMOUFLAGE]->val3;
 		//The official equation is *2, but that only applies when sd's do critical.
 		//Therefore, we use the old value 3 on cases when an sd gets attacked by a mob
 		cri -= tstatus->luk*(!sd&&tsd?3:2);
@@ -3232,7 +3232,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				def2 += 2 * tsc->data[SC_GT_REVITALIZE]->val4;
 
 			if( tsc && tsc->data[SC_CAMOUFLAGE] ){
-				i = 5 * (10-tsc->data[SC_CAMOUFLAGE]->val4);
+				i = 5 * tsc->data[SC_CAMOUFLAGE]->val3;
 				def1 -= def1 * i / 100;
 				def2 -= def2 * i / 100;
 			}
@@ -3349,7 +3349,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 			}
 
 			if(sc->data[SC_CAMOUFLAGE])
-				ATK_ADD(30 * (10-sc->data[SC_CAMOUFLAGE]->val4) );
+				ATK_ADD(30 * sc->data[SC_CAMOUFLAGE]->val3 );
 		}
 
 		//Refine bonus

+ 92 - 86
src/map/channel.c

@@ -20,6 +20,11 @@
 static DBMap* channel_db; // channels
 DBMap* channel_get_db(void){ return channel_db; }
 
+struct chan_banentry {
+	int char_id;
+	char char_name[NAME_LENGTH];
+} chan_banentry;
+
 /*
  * Create *channel
  * - will then add it in channel_db if type not map or ally
@@ -37,7 +42,7 @@ struct Channel* channel_create(char *name, char *pass, unsigned char color, enum
 
 	CREATE( channel, struct Channel, 1 ); //will exit on fail allocation
 	channel->users = idb_alloc(DB_OPT_BASE);
-	channel->banned = idb_alloc(DB_OPT_BASE);
+	channel->banned = idb_alloc(DB_OPT_BASE|DB_OPT_RELEASE_DATA);
 	channel->opt = CHAN_OPT_BASE;
 	channel->type = chantype;
 	channel->color = color;
@@ -62,7 +67,7 @@ struct Channel* channel_create(char *name, char *pass, unsigned char color, enum
  * Delete channel *channel
  * - check if there is any user in channel and make them all quit
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : invalid channel
  */
 int channel_delete(struct Channel *channel) {
@@ -98,13 +103,13 @@ int channel_delete(struct Channel *channel) {
 }
 
 /*
- * Make player *sd join an channel *channel
+ * Make player *sd join a channel *channel
  * - add charid to channel user list
  * - add *channel to user channel list
  * return
  *  0 : success
  * -1 : invalid channel or sd
- * -2 : already in here
+ * -2 : sd already in channel
  * -3 : sd banned
  */
 int channel_join(struct Channel *channel, struct map_session_data *sd) {
@@ -112,11 +117,11 @@ int channel_join(struct Channel *channel, struct map_session_data *sd) {
 
 	if(!channel || !sd)
 		return -1;
-	if(channel_haspc(channel,sd)==1) //already in here
+	if(channel_haspc(channel,sd)==1)
 		return -2;
 
-	if(channel_haspcbanned(channel,sd)==1){ //banned ?
-		sprintf(output, msg_txt(sd,1438),channel->name); //You cannot join the '%s' channel because you've been banned from it
+	if(channel_haspcbanned(channel,sd)==1){
+		sprintf(output, msg_txt(sd,1438),channel->name); //You're currently banned from the '%s' channel.
 		clif_displaymessage(sd->fd, output);
 		return -3;
 	}
@@ -146,7 +151,7 @@ int channel_join(struct Channel *channel, struct map_session_data *sd) {
  * create the map_channel if not exist
  * return
  *  -1 : invalid sd
- *  -2 : already in here (channel_join)
+ *  -2 : sd already in channel (channel_join)
  *  -3 : sd banned (channel_join)
  */
 int channel_mjoin(struct map_session_data *sd) {
@@ -169,8 +174,8 @@ int channel_mjoin(struct map_session_data *sd) {
  * Make all ally member of guild *g join our guild chan
  * nb : they only join if they are into their own guild channel (if they not they probably left it)
  * return
- *  0 : succes
- *  -1 : invalide guild or no channel for guild
+ *  0 : success
+ *  -1 : invalid guild or no channel for guild
  */
 int channel_ajoin(struct guild *g){
 	int i;
@@ -183,7 +188,7 @@ int channel_ajoin(struct guild *g){
 		if(ga->guild_id && (ga->opposition==0) && (ag=guild_search(ga->guild_id))){
 			for (i = 0; i < ag->max_member; i++){ //load all guildmember
 				pl_sd = ag->member[i].sd;
-				if(channel_haspc(ag->channel,pl_sd)==1)  //only if they are in there own guildchan
+				if(channel_haspc(ag->channel,pl_sd)==1)  //only if they are in their own guildchan
 					channel_join(g->channel,pl_sd);
 			}
 		}
@@ -195,9 +200,9 @@ int channel_ajoin(struct guild *g){
  * Make *sd join the guild channel
  * create a chan guild if not exist
  * return
- *   0 : succes
+ *   0 : success
  *  -1 : invalid sd
- *  -2 : sd have no guild attach
+ *  -2 : sd has no guild attached
  */
 int channel_gjoin(struct map_session_data *sd, int flag){
 	struct Channel *channel;
@@ -321,7 +326,7 @@ int channel_pcquit(struct map_session_data *sd, int type){
  * Format *msg from *sd to send it in *channel
  * Also truncate extra char if msg too long (max=RACHSYS_MSG_LENGTH)
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : invalid sd, channel, or msg
  *  -2 : delay msg too low since last talk
  */
@@ -342,36 +347,35 @@ int channel_send(struct Channel *channel, struct map_session_data *sd, const cha
 	return 0;
 }
 
-
-
 /*
- * Chk parameter for channel creation
+ * Check parameters for channel creation
  * @type (bitflag)
- *	1 : check name # + lenght
+ *	1 : check name # + length
  *	2 : check if already exist, need 1
- *	4 : check pass lenght
+ *	4 : check password length
  * return
  *  0 : success
  *  -1 : bad chan name
- *  -2 : bad chan name lenght
+ *  -2 : bad chan name length
  *  -3 : pass given too long
- *  -4 : chan already exist
+ *  -4 : chan already exists
  */
 int channel_chk(char *chname, char *chpass, int type){
 	if(type&1){ //check name
-		if( chname[0] != '#' ) 	return -1; // Channel name must start with '#'
+		if( chname[0] != '#' )
+			return -1;
 		if ( strlen(chname) < 3 || strlen(chname) > CHAN_NAME_LENGTH )
-			return -2; // Channel length must be between 3 and %d.
+			return -2;
 		if( (type&2) && (
 			strcmpi(chname + 1,Channel_Config.map_chname) == 0
 			|| strcmpi(chname + 1,Channel_Config.ally_chname) == 0
 			|| strdb_exists(channel_db, chname + 1) )
 			) {
-			return -4; // Channel '%s' already exist
+			return -4;
 		}
 	}
 	if (type&4 && (chpass != '\0' && strlen(chpass) > CHAN_NAME_LENGTH ) ) {
-		return -3; // Channel pass can't be higher then %d.
+		return -3;
 	}
 
 	return 0;
@@ -414,7 +418,7 @@ struct Channel* channel_name2channel(char *chname, struct map_session_data *sd,
 /*
  * Channel check if he has *sd in his user list
  * return
- *  -1 : invalide sd or channel
+ *  -1 : invalid sd or channel
  *  0 : not found
  *  1 : has pc
  */
@@ -426,7 +430,7 @@ int channel_haspc(struct Channel *channel,struct map_session_data *sd){
 /*
  * Channel check if *sd is banned from channel (banned ?)
  * return
- *  -1 : invalide sd or channel
+ *  -1 : invalid sd or channel
  *  0 : not found
  *  1 : has pc
  */
@@ -458,7 +462,7 @@ int channel_pc_haschan(struct map_session_data *sd, struct Channel *channel){
  *  mine : list of chan *sd is in + nb of user
  *  void : list of public chan + map + guild + nb of user
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_display_list(struct map_session_data *sd, char *options){
@@ -469,8 +473,6 @@ int channel_display_list(struct map_session_data *sd, char *options){
 	if(!sd || !options)
 		return -1;
 
-
-
 	//display availaible colors
 	if( options[0] != '\0' && strcmpi(options,"colors") == 0 ) {
 		char msg[40];
@@ -480,9 +482,9 @@ int channel_display_list(struct map_session_data *sd, char *options){
 		}
 	}
 	else if( options[0] != '\0' && strcmpi(options,"mine") == 0 ) { //display chan I'm into
-		clif_displaymessage(sd->fd, msg_txt(sd,1475)); // ---- Joined Channels ----
+		clif_displaymessage(sd->fd, msg_txt(sd,1475)); // ---- My Channels ----
 		if(!sd->channel_count)
-			clif_displaymessage(sd->fd, msg_txt(sd,1476)); //You have not joined any channel yet
+			clif_displaymessage(sd->fd, msg_txt(sd,1476)); // You have not joined any channels.
 		else {
 			for(k=0; k<sd->channel_count; k++){
 				channel = sd->channels[k];
@@ -497,13 +499,13 @@ int channel_display_list(struct map_session_data *sd, char *options){
 
 		clif_displaymessage(sd->fd, msg_txt(sd,1410)); // ---- Public Channels ----
 		if( Channel_Config.map_enable ) {
-			sprintf(output, msg_txt(sd,1409), Channel_Config.map_chname, map[sd->bl.m].channel ? db_size(map[sd->bl.m].channel->users) : 0);// - #%s ( %d users )
+			sprintf(output, msg_txt(sd,1409), Channel_Config.map_chname, map[sd->bl.m].channel ? db_size(map[sd->bl.m].channel->users) : 0);// - #%s (%d users)
 			clif_displaymessage(sd->fd, output);
 		}
 		if( Channel_Config.ally_enable && sd->status.guild_id ) {
 			struct guild *g = sd->guild;
 			if( !g ) return -1; //how can this happen if status.guild_id true ?
-			sprintf(output, msg_txt(sd,1409), Channel_Config.ally_chname, db_size(((struct Channel *)g->channel)->users));// - #%s ( %d users )
+			sprintf(output, msg_txt(sd,1409), Channel_Config.ally_chname, db_size(((struct Channel *)g->channel)->users));// - #%s (%d users)
 			clif_displaymessage(sd->fd, output);
 		}
 		iter = db_iterator(channel_db);
@@ -519,12 +521,10 @@ int channel_display_list(struct map_session_data *sd, char *options){
 	return 0;
 }
 
-
-
 /*
- * An user *sd is attempting to create a channel named *chname with pass *chpass
+ * A user *sd is attempting to create a channel named *chname with pass *chpass
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
@@ -536,7 +536,7 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
 		return 0;
 
 	res = channel_chk(chname,chpass,7);
-	if(res==0){ //succes
+	if(res==0){ //success
 		channel = channel_create(chname + 1,chpass,0,CHAN_TYPE_PRIVATE,sd->status.char_id);
 		channel_join(channel,sd);
 		if( !( channel->opt & CHAN_OPT_ANNOUNCE_JOIN ) ) {
@@ -547,7 +547,7 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
 		switch(res){
 		case -1: sprintf(output, msg_txt(sd,1405), CHAN_NAME_LENGTH); break;// Channel name must start with '#'.
 		case -2: sprintf(output, msg_txt(sd,1406), CHAN_NAME_LENGTH); break;// Channel length must be between 3 and %d.
-		case -3: sprintf(output, msg_txt(sd,1436), CHAN_NAME_LENGTH); break;// Channel pass can't be higher then %d.
+		case -3: sprintf(output, msg_txt(sd,1436), CHAN_NAME_LENGTH); break;// Channel password can't be over %d characters.
 		case -4: sprintf(output, msg_txt(sd,1407), chname);// Channel '%s' is not available.
 		}
 		clif_displaymessage(sd->fd, output);
@@ -557,9 +557,9 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
 }
 
 /*
- * An user *sd is attempting to delete a channel named *chname
+ * A user *sd is attempting to delete a channel named *chname
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcdelete(struct map_session_data *sd, char *chname){
@@ -581,16 +581,16 @@ int channel_pcdelete(struct map_session_data *sd, char *chname){
 	}
 	channel_delete(channel);
 
-	sprintf(output, msg_txt(sd,1477),chname); //Channel %s deleted
+	sprintf(output, msg_txt(sd,1448),chname); // Channel '%s' deleted.
 	clif_displaymessage(sd->fd, output);
 
 	return 0;
 }
 
 /*
- * An user *sd is attempting to leave a channel named *chname
+ * A user *sd is attempting to leave a channel named *chname
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcleave(struct map_session_data *sd, char *chname){
@@ -630,9 +630,9 @@ int channel_pcleave(struct map_session_data *sd, char *chname){
 }
 
 /*
- * An user *sd is attempting to join a channel named *chname
+ * A user *sd is attempting to join a channel named *chname
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
@@ -659,7 +659,7 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
 				if( pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) ) {
 					sd->stealth = true;
 				} else {
-					sprintf(output, msg_txt(sd,1401),chname,"@Join"); // '%s' Channel is password protected (usage: %s <#channel_name> <password>)
+					sprintf(output, msg_txt(sd,1401),chname,"@join"); // Channel '%s' is password-protected (usage: %s <#channel_name> <password>).
 					clif_displaymessage(sd->fd, output);
 					return -1;
 				}
@@ -667,7 +667,7 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
 		}
 	}
 	else {
-		sprintf(output, msg_txt(sd,1400),chname,"@Join"); // Unknown Channel '%s' (usage: %s <#channel_name>)
+		sprintf(output, msg_txt(sd,1400),chname,"@join"); // Unknown channel '%s' (usage: %s <#channel_name>).
 		clif_displaymessage(sd->fd, output);
 		return -1;
 	}
@@ -688,9 +688,9 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
 }
 
 /*
- * An user *sd is attempting to change color with *color of  a channel named *chname
+ * A user *sd is attempting to change color with *color of  a channel named *chname
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pccolor(struct map_session_data *sd, char *chname, char *color){
@@ -733,10 +733,10 @@ int channel_pccolor(struct map_session_data *sd, char *chname, char *color){
 }
 
 /*
- * An user *sd is attempting to bind (make default message output display chan talk)
+ * A user *sd is attempting to bind (make default message output display chan talk)
  * from a channel named *chname
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcbind(struct map_session_data *sd, char *chname){
@@ -764,9 +764,9 @@ int channel_pcbind(struct map_session_data *sd, char *chname){
 }
 
 /*
- * An user *sd is attempting to unbind
+ * A user *sd is attempting to unbind
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcunbind(struct map_session_data *sd){
@@ -786,13 +786,13 @@ int channel_pcunbind(struct map_session_data *sd){
 }
 
 /*
- * An user *sd is attempting to do something with the banlist
+ * A user *sd is attempting to do something with the banlist
  * @flag == 0 : ban
  * @flag == 1 : unban
  * @flag == 2 : unbanall
  * @flag == 3 : banlist
  *  return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_data *tsd, int flag){
@@ -820,25 +820,26 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
 	if(flag != 2 && flag != 3){
 		char banned;
 		if(!tsd || pc_has_permission(tsd, PC_PERM_CHANNEL_ADMIN) ) {
-			clif_displaymessage(sd->fd, msg_txt(sd,1464)); // Ban failed, not possible to ban/unban this user.
+			sprintf(output, msg_txt(sd,1464), tsd->status.name);// Ban failed for player '%s'.
+			clif_displaymessage(sd->fd, output);
 			return -1;
 		}
 
 		banned = channel_haspcbanned(channel,tsd);
 		if(!flag &&  banned==1) {
-			sprintf(output, msg_txt(sd,1465), tsd->status.name);// Player '%s' is already banned from this channel
+			sprintf(output, msg_txt(sd,1465), tsd->status.name);// Player '%s' is already banned from this channel.
 			clif_displaymessage(sd->fd, output);
 			return -1;
 		}
 		else if(flag==1 && banned==0) {
-			sprintf(output, msg_txt(sd,1440), tsd->status.name);//  1440: Player '%s' is not banned from this channel
+			sprintf(output, msg_txt(sd,1440), tsd->status.name);// Player '%s' is not banned from this channel.
 			clif_displaymessage(sd->fd, output);
 			return -1;
 		}
 	}
 	else {
 		if( !db_size(channel->banned) ) {
-			sprintf(output, msg_txt(sd,1439), chname);// Channel '%s' has no banned players
+			sprintf(output, msg_txt(sd,1439), chname);// Channel '%s' contains no banned players.
 			clif_displaymessage(sd->fd, output);
 			return -1;
 		}
@@ -846,31 +847,36 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
 
 	//let properly alter the list now
 	switch(flag){
-	case 0:
-		idb_put(channel->banned, tsd->status.char_id, tsd);
+	case 0: {
+		struct chan_banentry *cbe;
+		CREATE(cbe, struct chan_banentry, 1);
+		cbe->char_id = tsd->status.char_id;
+		strcpy(cbe->char_name,tsd->status.name);
+		idb_put(channel->banned, tsd->status.char_id, cbe);
 		channel_clean(channel,tsd,0);
-		sprintf(output, msg_txt(sd,1437),tsd->status.name,chname); // Player '%s' has now been banned from '%s' channel
+		sprintf(output, msg_txt(sd,1437),tsd->status.name,chname); // Player '%s' is banned from the '%s' channel.
 		break;
+		}
 	case 1:
 		idb_remove(channel->banned, tsd->status.char_id);
-		sprintf(output, msg_txt(sd,1441),tsd->status.name,chname); // Player '%s' has now been unbanned from the '%s' channel
+		sprintf(output, msg_txt(sd,1441),tsd->status.name,chname); // Player '%s' is unbanned from the '%s' channel.
 		break;
 	case 2:
 		db_clear(channel->banned);
-		sprintf(output, msg_txt(sd,1442),chname); // Removed all bans from '%s' channel
+		sprintf(output, msg_txt(sd,1442),chname); // Cleared all bans from the '%s' channel.
 		break;
 	case 3: {
 		DBIterator *iter = db_iterator(channel->banned);
-		struct map_session_data *pl_sd;
-		sprintf(output, msg_txt(sd,1443), channel->name);// -- '%s' ban list
+		struct chan_banentry *cbe;
+		sprintf(output, msg_txt(sd,1443), channel->name);// ---- '#%s' Ban List:
 		clif_displaymessage(sd->fd, output);
-		for( pl_sd = dbi_first(iter); dbi_exists(iter); pl_sd = dbi_next(iter) ) { //for all users
-			sprintf(output, msg_txt(sd,1444),pl_sd->status.char_id,pl_sd->status.name); //  %d: %s
+		for( cbe = dbi_first(iter); dbi_exists(iter); cbe = dbi_next(iter) ) { //for all users
+			sprintf(output, "%d: %s",cbe->char_id,cbe->char_name);
 			clif_displaymessage(sd->fd, output);
 		}
 		dbi_destroy(iter);
 		}
-		break;
+		return 0;
 	}
 	clif_displaymessage(sd->fd, output);
 
@@ -878,12 +884,12 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
 }
 
 /*
- * An user *sd is attempting to set an option on channel named *chname
+ * A user *sd is attempting to set an option on channel named *chname
  * @chname = channel name
  * @option = available = opt_str
  * @val = value to assign to option
  * return
- *  0 : succes
+ *  0 : success
  *  -1 : fail
  */
 int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *option, const char *val){
@@ -916,16 +922,16 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
 
 
 	if( option == '\0' ) {
-		clif_displaymessage(sd->fd, msg_txt(sd,1446));// You need to input a option
+		clif_displaymessage(sd->fd, msg_txt(sd,1446));// You need to input an option.
 		return -1;
 	}
 
 	s = ARRAYLENGTH(opt_str);
 	ARR_FIND(1,s,k,( strncmpi(option,opt_str[k],3) == 0 )); //we only cmp 3 letter atm
 	if( k == 3 ) {
-		sprintf(output, msg_txt(sd,1447), option);// '%s' is not a known channel option
+		sprintf(output, msg_txt(sd,1447), option);// Unknown channel option '%s'.
 		clif_displaymessage(sd->fd, output);
-		clif_displaymessage(sd->fd, msg_txt(sd,1448)); // -- Available options
+		clif_displaymessage(sd->fd, msg_txt(sd,1414));// ---- Available options:
 		for( k = 1; k < s; k++ ) {
 			sprintf(output, msg_txt(sd,1445), opt_str[k]);// - '%s'
 			clif_displaymessage(sd->fd, output);
@@ -935,16 +941,16 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
 
 	if( val[0] == '\0' ) {
 		if ( k == CHAN_OPT_MSG_DELAY ) {
-			sprintf(output, msg_txt(sd,1466), opt_str[k]);// For '%s' you need the amount of seconds (from 0 to 10)
+			sprintf(output, msg_txt(sd,1466), opt_str[k]);// Input the number of seconds (0-10) for the '%s' option.
 			clif_displaymessage(sd->fd, output);
 			return -1;
 		} else if( channel->opt & k ) {
-			sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // option '%s' is already enabled, if you'd like to disable it type '@channel setopt %s 0'
+			sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
 			clif_displaymessage(sd->fd, output);
 			return -1;
 		} else {
 			channel->opt |= k;
-			sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);//option '%s' is now enabled for channel '%s'
+			sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);// Option '%s' is enabled for channel '%s'.
 			clif_displaymessage(sd->fd, output);
 			return 0;
 		}
@@ -952,42 +958,42 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
 		int v = atoi(val);
 		if( k == CHAN_OPT_MSG_DELAY ) {
 			if( v < 0 || v > 10 ) {
-				sprintf(output, msg_txt(sd,1451), v, opt_str[k]);// value '%d' for option '%s' is out of range (limit is 0-10)
+				sprintf(output, msg_txt(sd,1451), v, opt_str[k]);// Value '%d' for option '%s' is out of range (limit 0-10).
 				clif_displaymessage(sd->fd, output);
 				return false;
 			}
 			if( v == 0 ) {
 				channel->opt &=~ k;
 				channel->msg_delay = 0;
-				sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name,v);// option '%s' is now disabled for channel '%s'
+				sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name,v);// Option '%s' is disabled for channel '%s'.
 				clif_displaymessage(sd->fd, output);
 				return true;
 			} else {
 				channel->opt |= k;
 				channel->msg_delay = v;
-				sprintf(output, msg_txt(sd,1452), opt_str[k],channel->name,v);// option '%s' is now enabled for channel '%s' with %d seconds
+				sprintf(output, msg_txt(sd,1452), opt_str[k],channel->name,v);// Option '%s' is enabled for channel '%s' at %d seconds.
 				clif_displaymessage(sd->fd, output);
 				return true;
 			}
 		} else {
 			if( v ) {
 				if( channel->opt & k ) {
-					sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // option '%s' is already enabled, if you'd like to disable it type '@channel opt %s 0'
+					sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
 					clif_displaymessage(sd->fd, output);
 					return false;
 				} else {
 					channel->opt |= k;
-					sprintf(output, msg_txt(sd,1454), opt_str[k],channel->name);//option '%s' is now enabled for channel '%s'
+					sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);// Option '%s' is enabled for channel '%s'.
 					clif_displaymessage(sd->fd, output);
 				}
 			} else {
 				if( !(channel->opt & k) ) {
-					sprintf(output, msg_txt(sd,1454), opt_str[k],channel->name); // option '%s' is not enabled on channel '%s'
+					sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name); // Option '%s' is enabled for channel '%s'.
 					clif_displaymessage(sd->fd, output);
 					return false;
 				} else {
 					channel->opt &=~ k;
-					sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name);// option '%s' is now disabled for channel '%s'
+					sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name);// Option '%s' is disabled for channel '%s'.
 					clif_displaymessage(sd->fd, output);
 					return true;
 				}

+ 2 - 4
src/map/clif.c

@@ -729,7 +729,7 @@ void clif_dropflooritem(struct flooritem_data* fitem)
 	uint32 header=0x84b;
 #else
 	uint8 buf[17];
-	uint32 header=0x09b;
+	uint32 header=0x09e;
 #endif
 	int view, offset=0;
 
@@ -9159,9 +9159,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 			sd->pvp_lost = 0;
 		}
 		clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
-	} else
-	// set flag, if it's a duel [LuzZza]
-	if(sd->duel_group)
+	} else if(sd->duel_group) // set flag, if it's a duel [LuzZza]
 		clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
 
 	if (map[sd->bl.m].flag.gvg_dungeon)

+ 30 - 35
src/map/skill.c

@@ -368,13 +368,13 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 	struct status_change* sc;
 
 	switch( skill_id ) {
-	case BA_APPLEIDUN:
-	#ifdef RENEWAL
-		hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
-	#else
-		hp = 30+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
-	#endif
-		if( sd )
+		case BA_APPLEIDUN:
+		#ifdef RENEWAL
+			hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
+		#else
+			hp = 30+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
+		#endif
+			if( sd )
 				hp += 5*pc_checkskill(sd,BA_MUSICALLESSON);
 			break;
 		case PR_SANCTUARY:
@@ -386,23 +386,27 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 		default:
 			if (skill_lv >= battle_config.max_heal_lv)
 				return battle_config.max_heal;
-		#ifdef RENEWAL
-            /**
-             * Renewal Heal Formula
-             * Formula: ( [(Base Level + INT) / 5] x 30 ) x (Heal Level / 10) x (Modifiers) + MATK
-             **/
-            hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30  * skill_lv / 10;
-		#else
-			hp = ( status_get_lv(src) + status_get_int(src) ) / 8 * (4 + ( skill_id == AB_HIGHNESSHEAL ? ( sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv ) * 8);
-		#endif
+			#ifdef RENEWAL
+				/**
+				* Renewal Heal Formula
+				* Formula: ( [(Base Level + INT) / 5] x 30 ) x (Heal Level / 10) x (Modifiers) + MATK
+				**/
+				hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30  * (skill_id == AB_HIGHNESSHEAL ? (sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv) / 10;
+			#else
+				hp = (status_get_lv(src) + status_get_int(src)) / 8 * (4 + ( (skill_id == AB_HIGHNESSHEAL ? (sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv) * 8));
+			#endif
+			if (skill_id == AB_HIGHNESSHEAL)
+				hp *= ( 17 + 3 * skill_lv ) / 10;
 			if( sd && ((skill = pc_checkskill(sd, HP_MEDITATIO)) > 0) )
 				hp += hp * skill * 2 / 100;
 			else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
 				hp += hp * skill * 2 / 100;
+			if( sd && tsd && sd->status.partner_id == tsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
+				hp *= 2;
 			break;
 	}
 
-	if( ( (target && target->type == BL_MER) || !heal ) && skill_id != NPC_EVILLAND )
+	if( (!heal || (target && target->type == BL_MER)) && skill_id != NPC_EVILLAND )
 		hp >>= 1;
 
 	if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
@@ -413,9 +417,9 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 
 	sc = status_get_sc(target);
 	if( sc && sc->count ) {
-		if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
+		if( heal && sc->data[SC_CRITICALWOUND] ) // Critical Wound has no effect on offensive heal. [Inkfish]
 			hp -= hp * sc->data[SC_CRITICALWOUND]->val2/100;
-		if( sc->data[SC_DEATHHURT] && heal )
+		if( heal && sc->data[SC_DEATHHURT] )
 			hp -= hp * 20/100;
 		if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
 			hp += hp * sc->data[SC_INCHEALRATE]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
@@ -424,8 +428,8 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 	}
 
 #ifdef RENEWAL
-    // MATK part of the RE heal formula [malufett]
-    // Note: in this part matk bonuses from items or skills are not applied
+	// MATK part of the RE heal formula [malufett]
+	// Note: in this part matk bonuses from items or skills are not applied
 	switch( skill_id ) {
 		case BA_APPLEIDUN:	case PR_SANCTUARY:
 		case NPC_EVILLAND:	break;
@@ -434,6 +438,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 				struct status_data *status = status_get_status_data(src);
 				int min, max;
 
+				sc = status_get_sc(src);
 				min = max = status_base_matk(status, status_get_lv(src));
 				if( status->rhw.matk > 0 ){
 					int wMatk, variance;
@@ -4974,24 +4979,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	 **/
 	case AB_HIGHNESSHEAL:
 		{
-			int heal = skill_calc_heal(src, bl, (skill_id == AB_HIGHNESSHEAL)?AL_HEAL:skill_id, (skill_id == AB_HIGHNESSHEAL)?10:skill_lv, true);
+			int heal = skill_calc_heal(src, bl, skill_id, skill_lv, true);
 			int heal_get_jobexp;
-			//Highness Heal: starts at 1.7 boost + 0.3 for each level
-			if( skill_id == AB_HIGHNESSHEAL ) {
-				heal = heal * ( 17 + 3 * skill_lv ) / 10;
-			}
 			if( status_isimmune(bl) ||
 					(dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) ||
 					(dstsd && pc_ismadogear(dstsd)) )//Mado is immune to heal
 				heal=0;
 
-			if( sd && dstsd && sd->status.partner_id == dstsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
-				heal = heal*2;
-
-			if( tsc && tsc->count )
-			{
-				if( tsc->data[SC_KAITE] && !(sstatus->mode&MD_BOSS) )
-				{ //Bounce back heal
+			if( tsc && tsc->count ) {
+				if( tsc->data[SC_KAITE] && !(sstatus->mode&MD_BOSS) ) { //Bounce back heal
 					if (--tsc->data[SC_KAITE]->val2 <= 0)
 						status_change_end(bl, SC_KAITE, INVALID_TIMER);
 					if (src == bl)
@@ -17425,7 +17421,6 @@ void skill_init_unit_layout (void) {
 						memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
 					}
 					break;
-				case MH_POISON_MIST:
 				case AS_VENOMDUST: {
 						static const int dx[] = {-1, 0, 0, 0, 1};
 						static const int dy[] = { 0,-1, 0, 1, 0};
@@ -17721,7 +17716,7 @@ int skill_disable_check(struct status_change *sc, uint16 skill_id)
 		case RA_WUGDASH:
 		case RA_CAMOUFLAGE:
 			if( sc->data[status_skill2sc(skill_id)] )
-				return 1;	
+				return 1;
 	}
 
 	return 0;

+ 3 - 18
src/map/status.c

@@ -598,7 +598,7 @@ void initChangeTables(void) {
 	set_sc( RA_FEARBREEZE        , SC_FEARBREEZE      , SI_FEARBREEZE      , SCB_NONE );
 	set_sc( RA_ELECTRICSHOCKER   , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
 	set_sc( RA_WUGDASH           , SC_WUGDASH         , SI_WUGDASH         , SCB_SPEED );
-	set_sc( RA_CAMOUFLAGE        , SC_CAMOUFLAGE      , SI_CAMOUFLAGE      , SCB_CRI|SCB_SPEED|SCB_WATK|SCB_DEF );
+	set_sc( RA_CAMOUFLAGE        , SC_CAMOUFLAGE      , SI_CAMOUFLAGE      , SCB_SPEED );
 	add_sc( RA_MAGENTATRAP       , SC_ELEMENTALCHANGE );
 	add_sc( RA_COBALTTRAP        , SC_ELEMENTALCHANGE );
 	add_sc( RA_MAIZETRAP         , SC_ELEMENTALCHANGE );
@@ -10494,23 +10494,8 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 	case SC_CAMOUFLAGE:
 		if (!status_charge(bl, 0, 7 - sce->val1))
 			break;
-		if (sd && --sce->val4 >= 0) {
-			if (!(sce->val2 & 1)) {
-				status->cri += sd->base_status.cri * 1 / 10; //+10% per second
-				if (status->cri > 1000) { //max 100%
-					status->cri = 1000;
-					sce->val2 |= 1;
-				}
-			}
-			if (!(sce->val2 & 2)) {
-				status->def2 -= sd->base_status.def2 * 1 / 20; //-5% per second
-				if (status->def2 < 0) { //min 0
-					status->def2 = 0;
-					sce->val2 |= 2;
-				}
-			}
-			status->rhw.atk += 30; //+30 per second
- 		}
+		if (--sce->val4 >= 0)
+			sce->val3++;
 		sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
 		return 0;