-
Публикаций
302 -
Зарегистрирован
-
Посещение
-
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Серый_Ветер
-
никто в ядре не ковырялсо? кто что посоветует?
-
собственно хоцца добавить запрет за восрешение обычных чаров, которые не входят в осадную группу по захвату мирка, пардон, замка... по сути одно условие: если не входишь в осадную групу/клан - пошел лесом собсвенно пока что только хочется... где примерно копать нужно, чтобы выдрать нужный код... дальше уже по мере возможностей... нашел CastelDamageZoneDAO.java Скрытый текст package l2p.gameserver.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.List<Ljava.lang.String;>; import l2p.commons.dbutils.DbUtils; import l2p.gameserver.database.DatabaseFactory; import l2p.gameserver.model.entity.residence.Residence; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CastleDamageZoneDAO { private static final CastleDamageZoneDAO _instance = new CastleDamageZoneDAO(); private static final Logger _log = LoggerFactory.getLogger(CastleDoorUpgradeDAO.class); public static final String SELECT_SQL_QUERY = "SELECT zone FROM castle_damage_zones WHERE residence_id=?"; public static final String INSERT_SQL_QUERY = "INSERT INTO castle_damage_zones (residence_id, zone) VALUES (?,?)"; public static final String DELETE_SQL_QUERY = "DELETE FROM castle_damage_zones WHERE residence_id=?"; public static CastleDamageZoneDAO getInstance() { return _instance; } public List<String> load(Residence paramResidence) { Object localObject1 = Collections.emptyList(); Connection localConnection = null; PreparedStatement localPreparedStatement = null; ResultSet localResultSet = null; try { localConnection = DatabaseFactory.getInstance().getConnection(); localPreparedStatement = localConnection.prepareStatement("SELECT zone FROM castle_damage_zones WHERE residence_id=?"); localPreparedStatement.setInt(1, paramResidence.getId()); localResultSet = localPreparedStatement.executeQuery(); localObject1 = new ArrayList(); while (true) { if (!(localResultSet.next())) break label87; label87: ((List)localObject1).add(localResultSet.getString("zone")); } } catch (Exception localException) { _log.error("CastleDamageZoneDAO:load(Residence): " + localException, localException); } finally { DbUtils.closeQuietly(localConnection, localPreparedStatement, localResultSet); } return ((List<String>)localObject1); } public void insert(Residence paramResidence, String paramString) { Connection localConnection = null; PreparedStatement localPreparedStatement = null; try { localConnection = DatabaseFactory.getInstance().getConnection(); localPreparedStatement = localConnection.prepareStatement("INSERT INTO castle_damage_zones (residence_id, zone) VALUES (?,?)"); localPreparedStatement.setInt(1, paramResidence.getId()); localPreparedStatement.setString(2, paramString); localPreparedStatement.execute(); } catch (Exception localException) { _log.error("CastleDamageZoneDAO:insert(Residence, String): " + localException, localException); } finally { DbUtils.closeQuietly(localConnection, localPreparedStatement); } } public void delete(Residence paramResidence) { Connection localConnection = null; PreparedStatement localPreparedStatement = null; try { localConnection = DatabaseFactory.getInstance().getConnection(); localPreparedStatement = localConnection.prepareStatement("DELETE FROM castle_damage_zones WHERE residence_id=?"); localPreparedStatement.setInt(1, paramResidence.getId()); localPreparedStatement.execute(); } catch (Exception localException) { _log.error("CastleDamageZoneDAO:delete(Residence): " + localException, localException); } finally { DbUtils.closeQuietly(localConnection, localPreparedStatement); } } } по описанию похоже на осадную зону возле крепости... но оно не оно, точно не знаю... нашел сам скил воскрешения: Resurrect.class (ковыряюся в исходнике через jd) Скрытый текст package l2p.gameserver.skills.skillclasses; import java.util.Iterator; import java.util.List; import java.util.Set; import l2p.gameserver.cache.Msg; import l2p.gameserver.listener.actor.player.impl.ReviveAnswerListener; import l2p.gameserver.model.Creature; import l2p.gameserver.model.Player; import l2p.gameserver.model.Skill; import l2p.gameserver.model.Skill.SkillTargetType; import l2p.gameserver.model.base.BaseStats; import l2p.gameserver.model.entity.events.GlobalEvent; import l2p.gameserver.model.instances.PetInstance; import l2p.gameserver.serverpackets.SystemMessage2; import l2p.gameserver.serverpackets.components.CustomMessage; import l2p.gameserver.serverpackets.components.SystemMsg; import l2p.gameserver.templates.StatsSet; import org.apache.commons.lang3.tuple.Pair; public class Resurrect extends Skill { private final boolean _canPet; public Resurrect(StatsSet paramStatsSet) { super(paramStatsSet); this._canPet = paramStatsSet.getBool("canPet", false); } public boolean checkCondition(Creature paramCreature1, Creature paramCreature2, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3) { GlobalEvent localGlobalEvent; if (!(paramCreature1.isPlayer())) return false; if ((paramCreature2 == null) || ((paramCreature2 != paramCreature1) && (!(paramCreature2.isDead())))) { paramCreature1.sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } Player localPlayer1 = (Player)paramCreature1; Player localPlayer2 = paramCreature2.getPlayer(); if (localPlayer2 == null) { localPlayer1.sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } if ((localPlayer1.isInOlympiadMode()) || (localPlayer2.isInOlympiadMode())) { localPlayer1.sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } Object localObject = localPlayer1.getEvents().iterator(); while (((Iterator)localObject).hasNext()) { localGlobalEvent = (GlobalEvent)((Iterator)localObject).next(); if (!(localGlobalEvent.canRessurect(localPlayer1, paramCreature2, paramBoolean1))) { localPlayer1.sendPacket(new SystemMessage2(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addSkillName(this)); return false; } } if (oneTarget()) if (paramCreature2.isPet()) { localObject = localPlayer2.getAskListener(false); localGlobalEvent = ((localObject != null) && (((Pair)localObject).getValue() instanceof ReviveAnswerListener)) ? (ReviveAnswerListener)((Pair)localObject).getValue() : null; if (localGlobalEvent != null) { if (localGlobalEvent.isForPet()) paramCreature1.sendPacket(Msg.BETTER_RESURRECTION_HAS_BEEN_ALREADY_PROPOSED); else paramCreature1.sendPacket(Msg.SINCE_THE_MASTER_WAS_IN_THE_PROCESS_OF_BEING_RESURRECTED_THE_ATTEMPT_TO_ RESURRECT_THE_PET_HAS_BEEN_CANCELLED); return false; } if ((!(this._canPet)) && (this._targetType != Skill.SkillTargetType.TARGET_PET)) { localPlayer1.sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } } else if (paramCreature2.isPlayer()) { localObject = localPlayer2.getAskListener(false); localGlobalEvent = ((localObject != null) && (((Pair)localObject).getValue() instanceof ReviveAnswerListener)) ? (ReviveAnswerListener)((Pair)localObject).getValue() : null; if (localGlobalEvent != null) { if (localGlobalEvent.isForPet()) paramCreature1.sendPacket(Msg.WHILE_A_PET_IS_ATTEMPTING_TO_RESURRECT_IT_CANNOT_HELP_IN_RESURRECTING_IT S_MASTER); else paramCreature1.sendPacket(Msg.BETTER_RESURRECTION_HAS_BEEN_ALREADY_PROPOSED); return false; } if (this._targetType == Skill.SkillTargetType.TARGET_PET) { localPlayer1.sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } if (localPlayer2.isFestivalParticipant()) { localPlayer1.sendMessage(new CustomMessage("l2p.gameserver.skills.skillclasses.Resurrect", localPlayer1, new Object[0])); return false; } } return super.checkCondition(paramCreature1, paramCreature2, paramBoolean1, paramBoolean2, paramBoolean3); } public void useSkill(Creature paramCreature, List<Creature> paramList) { double d1 = this._power; if ((d1 > 100.0D) && (!(isHandler()))) { double d2 = this._power * (BaseStats.WIT.calcBonus(paramCreature) - 1D); d1 = d1 + ((d2 < 20.0D) ? 20.0D : d2); if (d1 < 90.0D) d1 = 90.0D; } Iterator localIterator = paramList.iterator(); while (true) { Creature localCreature; Object localObject1; while (true) { while (true) { while (true) { do { while (true) { if (!(localIterator.hasNext())) break label341; localCreature = (Creature)localIterator.next(); if (localCreature == null) break label338; if (localCreature.getPlayer() != null) break; } localObject1 = localCreature.getEvents().iterator(); while (((Iterator)localObject1).hasNext()) { localObject2 = (GlobalEvent)((Iterator)localObject1).next(); if (!(((GlobalEvent)localObject2).canRessurect((Player)paramCreature, localCreature, true))) break label338: } if ((localCreature.isPet()) && (this._canPet)) { if (localCreature.getPlayer() == paramCreature) { ((PetInstance)localCreature).doRevive(d1); break label318: } localCreature.getPlayer().reviveRequest((Player)paramCreature, d1, true); break label318: } } while (!(localCreature.isPlayer())); if (this._targetType != Skill.SkillTargetType.TARGET_PET) break; } localObject1 = (Player)localCreature; Object localObject2 = ((Player)localObject1).getAskListener(false); Object localObject3 = ((localObject2 != null) && (((Pair)localObject2).getValue() instanceof ReviveAnswerListener)) ? (ReviveAnswerListener)((Pair)localObject2).getValue() : null; if (localObject3 == null) break; } if (!(((Player)localObject1).isFestivalParticipant())) break; } ((Player)localObject1).reviveRequest((Player)paramCreature, d1, false); label318: label338: getEffects(paramCreature, localCreature, false, false); } if (isSSPossible()) label341: paramCreature.unChargeShots(isMagic()); } } может проще туда условие вбить? если не участник осады и находишься в осадной зоне - претворись бревном... пока осада не пройдет.
-
посмтри что выдает stdout.log мож ругается на что нибудь...
-
то есть за составление ТЗ теперь деньги берут... и как это понимать.... толи прогресс, толи регресс... причем применимо к обеим сторонам...(и заказчику и составителю ТЗ)
-
навикат ошибок не выдал когда таблицу вставлял в базу? таблица точно появилась? не пустая ли она?
-
1. я тока в c++ знаток да в Shell'e могу скрипты писать... java только так, на инстинктах программирования... 2. даже если были исходники мне бы это ничего не дало... так как в серверной части я ноль... (пока что)
-
а разве рестарт/релоад не нужно? хотя по идее это же работа с бд мускуля... не нужен там рестарт/релоад...
-
это с учетом что есть доступ к исходникам... у меня нету их... а то что есть, даже декомпилом не назовешь... одна прога одно выдала, другая прога совершенно другое.
-
нифига не в md5 я выше описал что в MD5 хешированные пароли клиент не принимал.. мож в сборке изменили метод. и еще. в инете выложены целиком обвязка. мне она даром не нужна. просто страничка с вводом логина пароля и проверкой на наличие. Максимум минут 15. И этот скрипт давно в интернете скрипт голый я за столько и сделал, остальное так, всякие там проверки на длину, символы и так далее. смотрел что в конфигах самого логинсервера стоит... я полдня искал методы шифрования. пока кажись Naike не показал часть исходников... и раз скрипт давно в инете, чего же не ответили вчера по моему вопросу... у меня 1й вариант
-
такс, мож пригодится для тех кто поднимает локальный серв, но не хочет авторегу, но и сайт поднимать не желает полноценный. Скрытый текстindex.php <html> <meta http-equiv="Content-Type" content="text/html; charset=koi8-r"> <center> <form method="post" action="login.php"> <H3>Вы точно не бот?</h3> <input type="radio" name="answer" value="a2" CHECKED>Возможно<Br> <input type="radio" name="answer" value="a3">Да, нет, наверное</p> <h4>логин</h4> <input type="text" name="login" value=""><Br> <h4>пароль</h4> <input type="password" name="pass" value=""><Br> <input type="password" name="pass1" value=""><Br><br> <input type="submit" name="enter" value="Зарегистрировать себя в игре"><Br> </form> </html> login.php <html> <meta http-equiv="Content-Type" content="text/html; charset=koi8-r"> <body> <?php $hostname = "localhost"; $username = "dle"; $password = "2584560"; $dbName = "vdt_login1"; $userstable = "accounts"; $log = $_POST['login']; $ps = $_POST['pass']; $ps1 = $_POST['pass1']; $st = $_POST['answer']; if ($st == "a2") echo "<h1>Вы БОТ?!</h1>"; elseif ($st == "a3") { if( $log == "") echo "<h1>Вы ввели пустой логин, вы все таки БОТ!</h1>"; elseif (!preg_match('/^[a-zA-Z0-9 \\._\\-]/',$log)) { echo "<h1>Login должен быть из латницы<h1>"; } elseif ( strlen($log) < 4 ) { echo "<h1>поле login должно быть более 4х символов</h1><br>"; } elseif ( strlen($log) > 14 ) { echo "<h1>поле login должно быть менее 14х символов</h1><br>"; } else { if( $ps == "" || $ps1 == "" ) { echo "<h1>Вы ввели пустой пароль, вы все таки БОТ или вы раздолбай....</h1><br>"; } elseif (strlen($ps) < 4) { echo "<h1>поле password должно быть более 4х символов</h1><br>"; } elseif (strlen($ps) > 16) { echo "<h1>поле login должно быть менее 16х символов</h1><br>"; } elseif ($log == $ps) { echo "<h1>Login совпадает c Password</h1><br><h4>Да, Вы, дяденька извращенец...</h4>"; } else { if( $ps == $ps1 ) { mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение"); mysql_select_db($dbName) or die(mysql_error()); $search = "SELECT * FROM `".$userstable."` WHERE `login` LIKE '".$log."'"; $result = mysql_query($search); $myrow = mysql_fetch_array($result); if (empty($myrow['login'])) { $query = "INSERT INTO `".$userstable."` (`login` ,`password`) VALUES ('".$log."', '".base64_encode(pack('H*', sha1($ps)))."');"; mysql_query($query); echo "<h1>Вы зарегистрированы:<br><br> Login: ".$log." <br>Password:".$ps."</h1><br>"; echo '<h2><font color=red>Вы будете перемещены через 5 секунд</font><h2>'; } else { echo '<h1><font color=red>Пользователь уже такой есть!</font><h1> <br><script language="JavaScript"><!-- t=1; function dorefresh() { ti=setTimeout("dorefresh();",2000); if (t>0) { t-=1; } else { clearTimeout(ti); window.location="index.php"; } } window.onLoad=dorefresh(); //--></script> '; } mysql_close(); echo '<br><script language="JavaScript"><!-- t=1; function dorefresh() { ti=setTimeout("dorefresh();",5000); if (t>0) { t-=1; } else { clearTimeout(ti); window.location="index.php"; } } window.onLoad=dorefresh(); //--></script> '; } else echo "<h1>no ok pass </h1><br>"; } } } else echo "other"; ?> </body> </html> простейшая рега, сделаная за минут сорок и полдня искал как шифруется пароль.... думаю тем кто смог поставить сервер, объяснять что где не нужно... если что объясню все.
-
кто сайты с регистрацией держит? можете посмотреть как там происходит регистрация, вернее SQL запрос.. или можете пнуть где есть исходники с регистрацией... вопрос отпал
-
INSERT INTO `accounts`(`login`, `password`) VALUES ('odin', SHA1(SHA1('odin'))); двойное преобразование тоже ничего не дало... 41 символ против 89
-
> cat /usr/games/tests/loginserver/config/loginserver.ini | grep Ha PasswordHash = whirlpool2 LegacyPasswordHash = sha1 на серваке вот. ща md5 попробую. INSERT INTO `accounts`(`login`, `password` ) VALUES ('azm9s', SHA1('azm9s')); INSERT INTO `accounts`(`login`, `password`) VALUES ('azm9s', MD5('azm9s')); отработало, но все равно не правильный пароль... и кстати... длина хеша меньше... через мускуль: через игру:
-
в каком формате бд хранит пароли мускуль к аккаунтам? INSERT INTO `accounts`(`login`, `password`, ) VALUES ('azm9s', sha1('azm9s')); не отработал; а INSERT INTO `accounts`(`login`, `password`, ) VALUES ('azm9s', password('azm9s')); неверный пароль пишет в клиенте.
-
какой у вас днс? а то у меня: C:\Documents and Settings\Loner>nslookup forummaxi.ru *** Can't find server name for address 192.168.100.1: Non-existent domain Server: a.root-servers.net Address: 198.41.0.4 Non-authoritative answer: Name: forummaxi.ru Address: 127.0.0.1 C:\Documents and Settings\Loner>nslookup forummaxi.ru 8.8.8.8 Server: google-public-dns-a.google.com Address: 8.8.8.8 Non-authoritative answer: Name: forummaxi.ru Address: 46.149.46.161 приходится через анонимайзер сидеть... пардон, обновил кеш у своего днс сервера... забыл что там ттл 2,5 недели
-
можно попросить выйти в skype?
-
Скрытый текст package l2p.gameserver.skills.effects; import l2p.gameserver.model.*; import l2p.gameserver.stats.Env; import l2p.gameserver.stats.Stats; import l2p.gameserver.stats.funcs.Func; import l2p.gameserver.stats.funcs.FuncTemplate; // Referenced classes of package l2p.gameserver.skills.effects: // EffectTemplate public class EffectServitorShare extends Effect { public class FuncShare extends Func { public void calc(Env env) { env.value += env.character.getPlayer().calcStat(stat, stat.getInit()) * value; } final EffectServitorShare this$0; public FuncShare(Stats stats, int i, Object obj, double d) { this$0 = EffectServitorShare.this; super(stats, i, obj, d); } } public EffectServitorShare(Env env, EffectTemplate effecttemplate) { super(env, effecttemplate); } public Func[] getStatFuncs() { FuncTemplate afunctemplate[] = getTemplate().getAttachedFuncs(); Func afunc[] = new Func[afunctemplate.length]; for(int i = 0; i < afunc.length; i++) afunc[i] = new FuncShare(afunctemplate[i]._stat, afunctemplate[i]._order, this, afunctemplate[i]._value); return afunc; } protected boolean onActionTime() { return false; } } откопал таки коды... получается трабла где то тут: env.value += env.character.getPlayer().calcStat(stat, stat.getInit()) * value; так как первое значение, оно же дамаг, считается нормально, следующее же и за ним дальше уже косячат... с кем можно "поговорить об этом" (с)психолог
-
я менял потом <set name="%pAtk1%" stat="pAtk" val="%pAtk1%" тоже самое было. уже так попробовал: <------><skill id="1557" levels="1" name="Servitor Share">^M <------><------><set name="magicType" val="MAGIC"/>^M <------><------><set name="icon" val="icon.skill1557"/>^M <------><------><set name="effectPoint" val="669"/>^M <------><------><set name="castRange" val="400"/>^M <------><------><set name="hitTime" val="1000"/>^M <------><------><set name="magicLvl" val="83"/>^M <------><------><set name="mpConsume" val="35"/>^M <------><------><set name="operateType" val="OP_ACTIVE"/>^M <------><------><set name="reuseDelay" val="600"/>^M <------><------><set name="skillType" val="BUFF"/>^M <------><------><set name="target" val="TARGET_PET"/>^M <------><------><set name="cancelable" val="false"/>^M <------><------><set name="isSelfDispellable" val="false"/>^M <------><------><set name="isSaveable" val="false"/>^M <------><------><set name="SumPATK" val=""/> <------><------> <for> <------><------><------><effect count="1" name="Buff" time="1200" val="0" applyOnCaster="true" applyOnSummon="false" /> <------><------><------><effect count="1" name="SumPATK"> <------><------><------> <add order="0x40" stat="pAtk" val="0.5"/> <------><------><------></effect> <------><------><------><effect count="1" name="ServitorShare" time="1200" val="0" applyOnCaster="False" applyOnSummon="True" <------><------><------> <add order="0x40" stat="pAtk" val="SumPATK" /> <------><------><------></effect> <------><------></for> <------></skill> тоже самое. думал создам пеерменную. так он кстати, вобще не работает.. хз, почему, вроде все соблюдено. на соседнем форуме сказали что все в ядре считается... блин, теперь декомпил предстоит
-
пробовал вот так: <------><------> <for> <------><------><------><effect count="1" name="Buff" time="1200" val="0" applyOnCaster="true" applyOnSummon="false" > <set name="%pAtk%" stat="pAtk" val="1.5" /> <set name="%pDef%" stat="pDef" val="1.5" /> <set name="%mAtk%" stat="mAtk" val="1.25" /> <set name="%mDef%" stat="mDef" val="1.25" /> <set name="%maxHp%" stat="maxHp" val="1.1" /> <set name="%maxMp%" stat="maxMp" val="1.1" /> <set name="%rCrit%" stat="rCrit" val="1.2" /> <set name="%pAtkSpd%" stat="pAtkSpd" val="1.1" /> </effect> <------><------><------><effect count="1" name="ServitorShare" time="1200" val="0" applyOnCaster="false" applyOnSummon="true" <------><------><------><------><mul order="0x40" stat="pAtk" val="%pAtk%" /> <------><------><------><------><mul order="0x40" stat="pDef" val="%pDef%" /> <------><------><------><------><mul order="0x40" stat="mAtk" val="%mAtk%" /> <------><------><------><------><mul order="0x40" stat="mDef" val="%mDef%" /> <------><------><------><------><mul order="0x40" stat="maxHp" val="%maxHp%" /> <------><------><------><------><mul order="0x40" stat="maxMp" val="%maxMp%" /> <------><------><------><------><mul order="0x40" stat="rCrit" val="%rCrit%" /> <------><------><------><------><mul order="0x40" stat="pAtkSpd" val="%pAtkSpd%" /> <------><------><------><------><mul order="0x40" stat="mAtkSpd" val="%mAtkSpd%" /> <------><------><------></effect> <------><------></for> но походу нельзя обновлять переменные
-
что еще может отвечать за работу скиллов? http://dl.dropbox.com/u/85955293/VDT_HighFive.zip вот сборка.....
-
перечитал раз 100 инструкцию: сделано все правильно... Манусал: Редактирование скилов. Подробное описание. Скрытый текст Все теги должны открываться и закрываться. Теги, которые можно уместить в одну строку могут закрываться внутри себя. Пример: <add .....> ..... </add> <add ...../> Формат xml-файлов: <?xml version='1.0' encoding='utf-8'?> <list> <skill id="1312" levels="1" name="Fishing"> <set name="weaponsAllowed" val="8192"/> <set name="mpConsume" val="1"/> <set name="reuseDelay" val="1000"/> <set name="target" val="TARGET_SELF"/> <set name="skillType" val="FISHING"/> <set name="operateType" val="OP_ACTIVE"/> <for> </for> </skill> <skill id="1313" levels="27" name="Pumping"> <table name="#power"> 19 28 38 50 55 60 65 70 86 92 97 103 109 115 136 143 149 156 187 195 202 245 253 262 271 312 321 </table> <set name="weaponsAllowed" val="8192"/> <set name="mpConsume" val="2"/> <set name="power" val="#power"/> <set name="reuseDelay" val="2000"/> <set name="target" val="TARGET_SELF"/> <set name="skillType" val="PUMPING"/> <set name="operateType" val="OP_ACTIVE"/> <for> </for> </skill> </list> 1. <?xml version='1.0' encoding='utf-8'?> Начало файла, заголовок 2. <list> Начало списка скиллов, в конце файла нужно закрыть тегом </list> 3. <skill id="1312" levels="1" name="Fishing"> Начало описания скилла. После всех тегов должно завершаться </skill> skill id - уникальный id для всех скиллов (и для мобов и для чаров) levels - максимальное количество уровней у этого скилла name - его название Описание скиллов: A) <table name="#power"> 19 28 38 50 </table> Таблица. При ссылке на параметр #power, будет браться значение, соответствующее текущему левелу скилла. Таблиц может быть несколько. Значения могут быть целыми и дробными, и должны отделяться пробелами. Значений должно быть столько, сколько левелов у этого скилла. <set name="COMMAND" val="VALUE"/> Обязательные параметры для каждого скилла: mpConsume - сколько маны требует reuseDelay - время перезарядки target - кто может быть целью skillType - тип скилла operateType - активный, пассивный, переключаемый (toggle) Список параметров: COMMAND: canLearn - (value = "" - Этот скилл нельзя будет выучить. default - не прописывать) castRange - Радиус действия каста activateRate - VALUE absorbAbs - VALUE absorbPart - VALUE advancedFlag - true/false advancedMultiplier - VALUE behind - true/false cancelable - true/false cancelTarget - true/false charge_skill_id - skill_id для charge corpse - true/false critical - true/false crush - true/false deathlink - true/false displayId - VALUE element - VALUE expPenalty - пенальти на эксп ("0.9") hitTime - VALUE hpConsume - VALUE isCubic - true/false isDwarven - true/false isMagic - true/false itemConsumeCount - VALUE itemConsumeCountInTime - VALUE itemConsumeDelay - VALUE itemConsumeId - item_id предмета, который будет использован "1458" itemConsumeIdInTime - item_id предмета, который будет использован регулярно "1458" itemConsumePeriods - период за который будет идти регулярный расход предмета lethal - true/false levelModifier - VALUE magicLevel - VALUE minPledgeClass - VALUE mpConsume - VALUE negateDebuffs - true/false negateEffects - "SLEEP" negateEffects - "STUN SLEEP MUTE POISON BLEED BUFF DEBUFF PARALYZE" negatePower - VALUE negateStats - "mAtk mAtkSpd" npcId - VALUE num_charges - VALUE onCrit - true/false operateType - OP_ACTIVE/OP_PASSIVE/OP_TOGGLE overHit - true/false power - VALUE reuseDelay - VALUE save - VALUE seed_any - true/false seed1 - VALUE seed2 - VALUE seedCount - VALUE seedcount1 - VALUE skillInterrupt - true/false skillRadius - VALUE skillTime - VALUE skillType - AGGRESSION/AIEFFECTS/BALANCE/BLEED/BUFF/CANCEL/CHARGE/CHARGEDAM/COMBATPOINTHEAL/ CONFUSION/CONT/CRAFT/DANCE/DEBUFF/DOT/DRAIN/DRAIN_SOUL/ENCHANT_ARMOR/ENCHANT_WEAPON/FATALBLOW/FEED_PET/FISHING/HEAL HEAL_PERCENT/HOT/INTERRUPT_DISARM/LETHAL_SHOT/LUCK/MANADAM/MANAHEAL/MDAM/MDAM_ELEMENTAL/MDOT/MUTE NEGATE_EFFECTS/NEGATE_STATS/NOTDONE/PARALYZE/PASSIVE/PDAM/PDAM/POISON/PUMPING/RECALL/REELING/RESURRECT ROOT/SEED/SIEGEFLAG/SLEEP/SONG/SOULSHOT/SPIRITSHOT/SPOIL/STUN/SUMMON/SUMMON/SUMMON_ITEM/SWEEP/TAKECASTLE TELEPORT_NPC/TURNER/UNLOCK SummonItemId - VALUE SummonMinCount - VALUE target - TARGET_ALLY/TARGET_AREA/TARGET_AREA_AIM_CORPSE/TARGET_AURA/TARGET_CORPSE/ TARGET_CORPSE_PLAYER/TARGET_HOLY/TARGET_ITEM/TARGET_MULTIFACE/TARGET_NONE/TARGET_ONE/TARGET_PARTY/ TARGET_PET/TARGET_SELF/TARGET_UNLOCKABLE unaggroing - true/false undeadOnly - true/false weaponsAllowed - VALUE C) <cond>...</cond> условия для активации скилла. Не используется в пассивках. Если скилл уже активирован, а условие не соответствует, он НЕ отключается. условия проверяются только для активации. Примеры использования: <cond msg="Too much hit points."><player percentHP="25"/></cond> (будет выдаваться сообщение) без сообщения: <cond><player percentHP="25"/></cond> (25% hp) или <cond><player minHP="25"/></cond> (>25 hp) D) <for>...</for> список эффектов, которые применяются при активном скилле или пассивных. Пример: <!-- добавить к параметру MEN значение 2. --> <for> <add order="0x10" stat="MEN" val="2"/> </for> <!-- умножить значение maxHP на значение взятое из таблицы Tab-maxHP и высветить иконку баффа --> <for> <effect count="1" name="Buff" time="1200" val="0" stackOrder="#stack" stackType="hp_up"> <mul order="0x50" stat="maxHp" val="#Tab-maxHp"/> </effect> </for> Эффекты добавляются словами: <add - добавить <mul - умножить <set - установить <sub - отнять <div - разделить order означает порядок вычисления. (order 0x08, 0x10, 0x30, 0x40, 0x50, 0x60) 0x08 используется для базовой установки параметра 0x10 используется для базовой модификации параметра 0x30 используется для добавления базовых бонусов к параметру 0x40 для прибавления статических бонусов к параметру 0x50 для множителей параметров 0x60 для прибавления статических бонусов ПОСЛЕ множителей Список изменяемых параметров: Статы: CON DEX INT MEN STR WIT Параметры: accCombat cAtk cAtkStatic hpEff mAtk mAtkSpd maxCp maxHp maxLoad maxMp mDef mpConsum mpConsumePhysical mpEff mReuse pAtk pAtkRange pAtkSpd pDef pReuse rCrit rCritPercent regCp regHp regMp sDef Остальное: absorbDam breath concentration element ExpSpMultiplier poleAngle rEvas rShld runSpd shldAngle transferDam bighead Рефлекты: reflectDam reflectMagicSkill reflectPhysicSkill Разное: CommonRecipeLimit DwarvenRecipeLimit inventoryLimit storageLimit tradeLimit Рейты: activateRate blowRate mCritRate Резисты: bleedRcpt bluntWpnRcpt bowWpnRcpt cancelRcpt daggerWpnRcpt debuffRcpt earthRcpt fearRcpt fireRcpt paralyzeRcpt poisonRcpt poleWpnRcpt rootRcpt sacredRcpt sleepRcpt stunRcpt swordWpnRcpt unholyRcpt waterRcpt windRcpt E) условия: <COMMAND VARIABLE="VALUE"> могут быть заключены в теги <and> <or> <not> Пример: <sub order="0x10" stat="STR" val="1"> <game night="true"/> </sub> <and> <player riding="strider"/> <target castledoor="true"/> </and> список команд (COMMAND): <player VARIABLE="PARAM"> VARIABLE: race (Undead/MagicCreatures/Beasts/Animals/Plants/Humanoids/Spirits/Angels/Demons/Dragons/Giants/Bugs/Fairies/Humans/Elves/DarkElves/Orcs/Dwarves/Others/NonLivingBeings/SiegeWeapons/DefendingArmy/Mercenaries/UnknownCreature) level resting (true/false) moving (true/false) running (true/false) riding (strider/wyvern/none) hp <target VARIABLE="PARAM"> VARIABLE: aggro (true/false) undead (true/false) pvp (true/false) mob (true/false) race (Undead/MagicCreatures/Beasts/Animals/Plants/Humanoids/Spirits/Angels/Demons/Dragons/Giants/Bugs/Fairies/Humans/Elves/DarkElves/Orcs/Dwarves/Others/NonLivingBeings/SiegeWeapons/DefendingArmy/Mercenaries/UnknownCreature) castledoor (true/false) direction (behind/front/side) <using VARIABLE="PARAM"> VARIABLE: kind (Shield/Sword/Blunt/Dagger/Bow/Pole/Etc/Fist/Dual Sword/Dual Fist/Big Sword/Pet/Rod) armor (None/Light/Heavy/Magic/Pet) skill (skill_id) slotitem <game VARIABLE="PARAM"> VARIABLE: night (true/false) F) Эффекты: <effect count="1" name="Buff" time="1200" val="0" stackOrder="#stack" stackType="hp_up"> count = кол-во тиков, которые длится эффект time = длина тика в секундах для этого эффекта (В примере у нас имеется один тик длинной 1200сек=20мин) name = что это за эффект. У эффектов могут быть аффекты на старт, стоп и на время действия. val = значение для "name" stackOrder = "Сила эффекта", чтобы сравнивать какой более сильный при обновлении stackType = "Тип эффекта", чтобы не накладывались схожие баффы Пример: добавляется скорость атаки на 25%, но при этом отнимается mana каждые 2 тика 35 HP длительность эффекта не ограничена (это у нас toggle) <for> <effect count="0x7fffffff" name="HealOverTime" time="2" val="-35"> <mul order="0x50" stat="pAtkSpd" val="1.25"/> </effect> </for> должно все работать.... почему то не хочет так же заметил: effect count="1" name="ServitorShare" time="1200" val="0" applyOnCaster="true" applyOnSummon="false" <effect count="1" name="Buff" displayId="-1" time="1200" val="0" abnormalLvl="1" abnormalType="multi_ как только местами поменять Buff на ServitorShare он начинает расчитывать нужным образом.. кроме крита, скорости, и неправильного счета п.деф. а когда в вышеприведенном варианте, то статы только свои а не хозяина считает
-
поспорил бы с некоторыми моментами.... использование tmpmfs или tmpfs например... pf/ipfw, тут тоже... но правда тут кто в чм больше разбирается bash вобще не нужно ставить, все скрипты прекрасно работают и в sh с небольшой переделкой. сам webmin имеет кучу дырок как ни прискорбно.... даже тот же phpmyadmin лучше.... wget тоже... для одной цели и fetch подойдет, он даже многопоточность поддерживает и дозагрузку как и wget
-
подскажите как писать эти скиллы.... сделал, работает... НО. он умножает свои параметры, а не параметры чара. часть просто нагло скопипастено с исходников l2j Скрытый текст <skill id="1557" levels="1" name="Servitor Share"> <set name="magicType" val="MAGIC"/> <set name="icon" val="icon.skill1557"/> <set name="effectPoint" val="669"/> <set name="castRange" val="400"/> <set name="hitTime" val="1000"/> <set name="magicLvl" val="83"/> <set name="mpConsume" val="35"/> <set name="operateType" val="OP_ACTIVE"/> <set name="reuseDelay" val="60000"/> <set name="skillType" val="BUFF"/> <set name="target" val="TARGET_PET"/> <set name="cancelable" val="false"/> <set name="isSelfDispellable" val="false"/> <set name="isSaveable" val="false"/> <set name="aggroPoints" val="669" /> <set name="effectRange" val="900" /> <set name="isMagic" val="true" /> <for> <effect count="1" name="ServitorShare" time="1200" val="0" applyOnCaster="true" applyOnSummon="false" <effect count="1" name="Buff" displayId="-1" time="1200" val="0" abnormalLvl="1" abnormalType="multi_ <mul order="0x40" stat="pAtk" val="1.5" /> <mul order="0x40" stat="pDef" val="1.5" /> <mul order="0x40" stat="mAtk" val="1.5" /> <mul order="0x40" stat="mDef" val="1.5" /> <mul order="0x40" stat="maxHp" val="1.5" /> <mul order="0x40" stat="maxMp" val="1.5" /> <mul order="0x40" stat="rCrit" val="1.5" /> <mul order="0x40" stat="pAtkSpd" val="1.5" /> <mul order="0x40" stat="mAtkSpd" val="1.5" /> </effect> </for> </skill> есть у питомца было 1 1 1 1 стало 1,5 1,5 1,5 1,5 он не реагирует на параметры самого игрока.... где не так написал? судя по описанию: Передает слуге умения призывателя. Передает слуге 50% Физ. Атк. / Защ., 25% Маг. Атк. / Маг. Защ. и 10% Макс. НР/МР, 20% Вероятности Крит Удара, 10% Скорости Физ. Атк. и 3% Скорости Маг. Атк. относительно характеристик призывателя.
-
не могу понять в чем прикол... если вписать applyOnCaster="true" applyOnSummon="false" то скилл отображается на чаре. но статы не меняются если убрать, то все нормально, кроме rCrit, но скилл отображается на животном....
-
это, я отсюда взял исходник с http://trac.l2jdp.com/browser/trunk/L2J_Da...01500-01599.xml Скрытый текст <skill id="1557" levels="1" name="Servitor Share"> <!-- H5 Skill --> <!-- Totally Unconfirmed --> <set name="aggroPoints" val="669" /> <!-- Guess --> <set name="castRange" val="400" /> <set name="effectRange" val="900" /> <set name="hitTime" val="1000" /> <set name="isMagic" val="true" /> <set name="magicLvl" val="83" /> <set name="mpConsume" val="35" /> <set name="operateType" val="OP_ACTIVE" /> <set name="reuseDelay" val="60000" /> <set name="skillType" val="BUFF" /> <set name="target" val="TARGET_PET" /> <for> <effect name="Buff" abnormalTime="1200" val="0" abnormalLvl="1" abnormalType="multi_buff"> <mul order="0x30" stat="pAtk" val="1.5" /> <mul order="0x30" stat="pDef" val="1.5" /> <mul order="0x30" stat="mAtk" val="1.25" /> <mul order="0x30" stat="mDef" val="1.25" /> <mul order="0x30" stat="maxHp" val="1.1" /> <mul order="0x30" stat="maxMp" val="1.1" /> <basemul order="0x30" stat="rCrit" val="0.2" /> <mul order="0x30" stat="pAtkSpd" val="1.1" /> <mul order="0x30" stat="mAtkSpd" val="1.03" /> </effect> </for> </skill> вот с ним вс статы становтяся но на время 2 секунды. все. разобрался. не те переменые были в исходнике. теперь все как надо работает. ток не закрывайте тему, еще буду баги писать. таки не все баги убрались... rCrit - не меняется. и сам скилл стал отображаться на звере. должен почему то на чаре. а при вводе переменныых applyOnCaster="true" applyOnSummon="false" <effect name="Buff" time="1200" abnormalTime="1200" val="0" abnormalLvl="1" applyOnCaster="true" applyOnSummon="false" abnormalType="multi_buff"> скил отображается на чаре, но статы не меняются.