бегать по воздуху - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 22.09.2017, 21:54   #11
Аватар для n3k0nation
Antihero

По умолчанию Re: бегать по воздуху

Код:
/*
 * Copyright (c) 2010-2016 fork2
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
 * is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 
 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package fork2.gs.model.actor.movement;

/**
 * Unreal Engine 2.5 Lineage 2 Interlude deasm
 * 
 * @author PointerRage, deasm izen
 */
public enum EEnvType {
	ET_NONE(-1),
	/** на земле */
	ET_GROUND(0x00),
	/** под водой */
	ET_UNDERWATER(0x01),
	/** воздух */
	ET_AIR(0x02),
	/** маунт */
	ET_HOVER(0x03);
	
	private final int type;
	EEnvType(int type) {
		this.type = type;
	}
	
	public int getType() {
		return type;
	}
}
Вырезка из UserInfo
Код:
	@Override
	public void write() {
		writeC(0x04);

		writeD(_activeChar.getX());
		writeD(_activeChar.getY());
		writeD(_activeChar.getZ());
		writeD(/*vehicle*/0x00);
		writeD(_activeChar.getObjectId());
		writeS(_activeChar.getName());
		writeD(_activeChar.getRace().ordinal());
		writeD(_activeChar.getAppearance().isFemale() ? 1 : 0);

		if(_activeChar.getClassIndex() == 0)
			writeD(_activeChar.getClassId().getId());
		else
			writeD(_activeChar.getBaseClass());

		writeD(_activeChar.getLevel());
		writeQ(_activeChar.getExp());
		writeD(_activeChar.getStat().getSTR());
		writeD(_activeChar.getStat().getDEX());
		writeD(_activeChar.getStat().getCON());
		writeD(_activeChar.getStat().getINT());
		writeD(_activeChar.getStat().getWIT());
		writeD(_activeChar.getStat().getMEN());
		writeD(_activeChar.getMaxHp());
		writeD((int) _activeChar.getCurrentHp());
		writeD(_activeChar.getMaxMp());
		writeD((int) _activeChar.getCurrentMp());
		writeD(_activeChar.getSp());
		writeD(_activeChar.getCurrentLoad());
		writeD(_activeChar.getMaxLoad());
		
		writeD(_activeChar.getActiveWeaponInstance() != null ? 0x28 : 0x14);
		
		for(int slot : Inventory.PAPERDOLL_ORDER)
			writeD(_activeChar.getInventory().getPaperdollObjectId(slot));
		
		for(int slot : Inventory.PAPERDOLL_ORDER)
			writeD(_activeChar.getInventory().getPaperdollItemId(slot));
		
		for(int slot : Inventory.PAPERDOLL_ORDER)
			writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot));
		
		writeD(_activeChar.getPAtk(null));
		writeD(_activeChar.getPAtkSpd());
		writeD(_activeChar.getPDef(null));
		writeD(_activeChar.getEvasionRate(null));
		writeD(_activeChar.getAccuracy());
		writeD(_activeChar.getCriticalHit(null, null));
		writeD(_activeChar.getMAtk(null, null));

		writeD(_activeChar.getMAtkSpd());
		writeD(_activeChar.getPAtkSpd());

		writeD(_activeChar.getMDef(null, null));

		writeD(_activeChar.getPvpFlag()); // 0-non-pvp, 1-pvp = violett name, 2 - blink
		writeD(_activeChar.getKarma());
		
		int runSpd = (int) Math.round(_activeChar.getRunSpeed() / _activeChar.getStat().getMovementSpeedMultiplier());
		int walkSpd = (int) Math.round(_activeChar.getStat().getWalkSpeed() / _activeChar.getStat().getMovementSpeedMultiplier());
		writeD(runSpd);
		writeD(walkSpd);
		int swimRunSpd = (int) Math.round((_activeChar.getRunSpeed() / 2) / _activeChar.getStat().getMovementSpeedMultiplier());
		int swimWalkSpd = (int) Math.round((_activeChar.getStat().getWalkSpeed() / 2) / _activeChar.getStat().getMovementSpeedMultiplier());
		writeD(swimRunSpd); //swim
		writeD(swimWalkSpd);
		writeD(0x00); //fall run
		writeD(0x00); //fall walk
		writeD(runSpd); //fly
		writeD(walkSpd);
		writeF(_activeChar.getStat().getMovementSpeedMultiplier());
		writeF(_activeChar.getStat().getAttackSpeedMultiplier());

		L2Summon pet = _activeChar.getPet();
		if(_activeChar.getMountType() != 0 && pet != null) {
			writeF(pet.getCollisionRadius());
			writeF(pet.getCollisionHeight());
		} else {
			writeF(_activeChar.getCollisionRadius());
			writeF(_activeChar.getCollisionHeight());
		}

		writeD(_activeChar.getAppearance().getHairStyle());
		writeD(_activeChar.getAppearance().getHairColor());
		writeD(_activeChar.getAppearance().getFace());
		writeD(GameMasterManager.getInstance().isGameMaster(_activeChar) ? 1 : 0); // builder level

		writeS(_activeChar.getTitle());

		if(_activeChar.getClan() != null) {
			writeD(_activeChar.getClanId());
			writeD(_activeChar.getClan().getClanCrestId());
			writeD(_activeChar.getAllyId());
			writeD(_activeChar.getClan().getAllyCrestId());
			// 0x40 leader rights
			// siege flags: attacker - 0x180 sword over name, defender - 0x80 shield, 0xC0 crown (|leader), 0x1C0 flag (|leader)
			writeD((_activeChar.isClanLeader() ? 0x40 : 0) | 
						(_activeChar.getSiegeState() > 0 ? 0x80 :
						_activeChar.getSiegeState() == 1 ? 0x100 : 0));
		} else {
			writeD(0x00);
			writeD(0x00);
			writeD(0x00);
			writeD(0x00);
			writeD(0x00);
		}
		
		writeC(_activeChar.getMountType());
		writeC(_activeChar.getPrivateStoreType());
		writeC(_activeChar.hasDwarvenCraft() ? 1 : 0);
		writeD(_activeChar.getPkKills());
		writeD(_activeChar.getPvpKills());

		Collection<Integer> cubics = _activeChar.getCubicsIds();
		writeH(cubics.size());
		for(int id : cubics)
			writeH(id);

		writeC(0x00); //party match room

		writeD(_activeChar.getAbnormalEffect());
		writeC(_activeChar.getEnvironment().getType());

		writeD(_activeChar.getClanPrivileges());

		writeH(_activeChar.getRecomLeft());
		writeH(_activeChar.getRecomHave());
		writeD(_activeChar.isMounted() ? _activeChar.getMountNpcId() : 0x00); // FIXME: MOUNT NPC ID +1000000?
		writeH(_activeChar.getInventoryLimit());

		writeD(_activeChar.getClassId().getId());
		writeD(0x00); // FIXME: special effects? circles around player...
		writeD(_activeChar.getMaxCp());
		writeD((int) _activeChar.getCurrentCp());
		writeC(_activeChar.isMounted() ? 0 : _activeChar.getEnchantEffect(false));

		writeC(_activeChar.getTeam());

		writeD(_activeChar.getClanId());
		writeC(_activeChar.isNoble() ? 1 : 0);
		writeC(_activeChar.isHero()? 1 : 0);

		writeC(_activeChar.isFishing() ? 1 : 0);
		writeD(_activeChar.getFishx());
		writeD(_activeChar.getFishy());
		writeD(_activeChar.getFishz());
		if(_activeChar.isInFunEvent())
			writeD(_activeChar.getGameEvent().getCharNameColor(_activeChar));
		else
			writeD(_activeChar.getNameColor());

		writeC(_activeChar.getStatus().getMoveType().ordinal()); //changes the Speed display on Status Window

		writeD(_activeChar.getPledgeClass()); //changes the text above CP on Status Window
		writeD(_activeChar.getSubPledgeType()); // TODO: PLEDGE TYPE
		if(_activeChar.isInFunEvent())
			writeD(_activeChar.getGameEvent().getCharTitleColor(_activeChar));
		else
			writeD(_activeChar.getTitleColor());

		writeD(CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()));
	}
Аналогично данный флаг должен быть и в CharInfo. Также, он присутствует в ChangeMoveType.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 27.09.2017, 21:47   #12
Аватар для TorBenLino
Пользователь

Автор темы (Топик Стартер) Re: бегать по воздуху

n3k0nation, У меня такого нет вообще(public enum EEnvType)
и я так и непонял что за флаг, а в ChangeMoveType только это
Код:
public class ChangeMoveType extends L2GameServerPacket
{
	public static final int WALK = 0;
	public static final int RUN = 1;
	
	private final int _charObjId;
	private final boolean _running;
	
	public ChangeMoveType(L2Character character)
	{
		_charObjId = character.getObjectId();
		_running = character.isRunning();
	}
	
	@Override
	protected final void writeImpl()
	{
		writeC(0x2e);
		writeD(_charObjId);
		writeD(_running ? RUN : WALK);
		writeD(0); // c2
	}
}
Добавлено через 17 минут
Emperor, виверна не тыкается в землю потому что у каждого перса есть параметр "высота" и он изменяется в зависимости от маунта виверна/страйдер/ничего
Код:
if (_activeChar.getMountType() != 0)
		{
			writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionRadius());
			writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionHeight());
		}
		else
		{
			writeF(_activeChar.getBaseTemplate().getCollisionRadius());
			writeF(_activeChar.getBaseTemplate().getCollisionHeight());
		}
как сделать на ил, искодники от acis, такую тему как на гифке?
я сделал дебафф который заставляет бежать перса в определенную точку, но он перемещается только по оси "x" и "y". По Z он по факту тоже перемещается(можно проверить через /loc) вот только это никак не отображается в клиенте.

Последний раз редактировалось TorBenLino; 27.09.2017 в 22:05. Причина: Добавлено сообщение
TorBenLino вне форума Ответить с цитированием
Непрочитано 05.10.2017, 19:55   #13
Аватар для TorBenLino
Пользователь

Автор темы (Топик Стартер) Re: бегать по воздуху

Цитата:
Сообщение от finfan Посмотреть сообщение
1. Посмотрите реализацию полётов на виверне, что происходит в коде с момента отработки метода mount. Это поможет вам создать метод, который позволяет персонажу перемещаться пор воздуху. Не забывайте про отправку пакетов и прочих вещей UserInfo etc..
2. Берётся файл lineagewarriorgrp.int или .dat и редактируется под эгиду полётов, а именно, игрок должен принимать анимацию Running когда он будет у вас летать, значит FallAnim должен быть установлен/задан по новому с нужной вам анимацией
запихнул метод setmount с параметрами виверны в effectfear, теперь когда юзаю фир перс запрыгивает на виверну и летит в указанную точку(вперед, вверх) после окончания фира автоматически оказывается на земле. Пытался изменить ид виверны на пустого нпц, но виверна всеравно появляется, только крыльями не машет теперь. Очевидно потому что ид веверны(12621) это сам дракон, без персонажа. а при использовании метода mount отправляется пакет с типом мауна (1-страйдер. 2-веверна) ну и походу клиент автоматически усаживает чара на виверну.
TorBenLino вне форума Ответить с цитированием
Непрочитано 19.10.2017, 06:29   #14
Аватар для TorBenLino
Пользователь

Автор темы (Топик Стартер) Re: бегать по воздуху

n3k0nation, нет у меня в исходниках ничего про тип окружающей среды.
Вопрос все еще актуален, помогите разобраться
TorBenLino вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 09:58. Часовой пояс GMT +3.

Вверх