Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
да уж... извращаться дак со вкусом...
ну неужели у тебя там нет возможности просто включать/выключать зоны и ведь наверняка есть тип зон с накладыванием баффа/дебаффа на игроков в этой зоне...
Сообщений: 831
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
03-13-2011, 12:15 AM
(Сообщение последний раз редактировалось: 03-13-2011, 02:58 AM krisadr.)
ну что то вроде этого есть, тока в XML ках. а как к ним привязать рб беспонятия, у меня же не pheonix
Добавлено через 19 минут
короче решил так делать, потому что как делать по другому не втыкаю, и то этот скрипт весь день писал))) всю субботу потратил... я не шучу
Добавлено через 2 часа 43 минуты
все разобрался, всем кто помогал спасибо тыкнул. каму нада вот код
Код: package ai.individual.raidboss;
import java.util.Collection;
import java.util.concurrent.ScheduledFuture;
import com.l2dc.gameserver.ThreadPoolManager;
import com.l2dc.gameserver.datatables.SkillTable;
import com.l2dc.gameserver.instancemanager.ZoneManager;
import com.l2dc.gameserver.model.L2Skill;
import com.l2dc.gameserver.model.actor.L2Character;
import com.l2dc.gameserver.model.actor.L2Npc;
import com.l2dc.gameserver.model.actor.instance.L2PcInstance;
import com.l2dc.gameserver.model.zone.L2ZoneType;
import com.l2dc.gameserver.network.serverpackets.ExSetCompassZoneCode;
import ai.group_template.L2AttackableAIScript;
/**
* @author z00m
*/
public class QueenShyeed extends L2AttackableAIScript
{
private static final int Queen_Shyeed = 25514;
private static final int Stacato_Nest_Zone = 20304;
protected ScheduledFuture<?> _zoneTask = null;
public QueenShyeed(int questId, String name, String descr) {
super(questId, name, descr);
addEnterZoneId(Stacato_Nest_Zone);
addExitZoneId(Stacato_Nest_Zone);
}
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if(event.equalsIgnoreCase("PlayerEnterInZone"))
{
player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.ALTEREDZONE));
}
else if(event.equalsIgnoreCase("PlayerExitZone"))
{
player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.GENERALZONE));
}
return null;
}
public String onEnterZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2PcInstance)
{
startQuestTimer("PlayerEnterInZone", 1000, null, (L2PcInstance) character);
if (!IsPlayer(zone) && _zoneTask == null)
{
character.sendMessage("Вы входите в Гнездо Стакато.");
_zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StacatoBuffTask(), 1000, 1001);
}
}
return super.onEnterZone(character, zone);
}
public String onExitZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2PcInstance)
{
startQuestTimer("PlayerExitZone", 1000, null, (L2PcInstance) character);
if (HowManyPlayersInZone(zone) == 1 && _zoneTask != null)
{
_zoneTask.cancel(true);
_zoneTask = null;
}
if (QueenShyeedIsAlive() == 0)
{
character.stopSkillEffects(6171);
}
if (QueenShyeedIsAlive() == 1)
{
character.stopSkillEffects(6169);
}
}
return super.onExitZone(character, zone);
}
// Если 1 то Каролева Стакато жива, если 0 - то нет.
private int QueenShyeedIsAlive()
{
int _QueenShyeedIsAlive = 0;
final L2ZoneType zone = ZoneManager.getInstance().getZoneById(Stacato_Nest_Zone);
final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
for (L2Character c: charsInZone)
{
if (c instanceof L2Npc)
{
if(((L2Npc) c).getNpcId() == Queen_Shyeed)
{
_QueenShyeedIsAlive = 1;
}
}
}
return _QueenShyeedIsAlive;
}
private boolean IsPlayer(L2ZoneType zone)
{
final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
for (L2Character player : charsInZone)
{
if(player instanceof L2PcInstance)
{
return true;
}
}
return false;
}
private int HowManyPlayersInZone(L2ZoneType zone)
{
int count = 0;
final Collection<L2Character> numb = zone.getCharactersInside().values();
for (L2Character numbchar : numb)
{
if (numbchar instanceof L2PcInstance)
{
count++;
}
}
return count;
}
private class StacatoBuffTask implements Runnable
{
public void run()
{
final L2ZoneType zone = ZoneManager.getInstance().getZoneById(Stacato_Nest_Zone);
if (HowManyPlayersInZone(zone) > 0)
{
int skillId = 0;
final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
for (L2Character chars : charsInZone)
{
if (QueenShyeedIsAlive() == 1)
{
if (chars instanceof L2PcInstance)
{
skillId = 6169;
handleNestBuff(chars, skillId);
}
if (chars instanceof L2Npc)
{
skillId = 6170;
handleNestBuff(chars, skillId);
}
}
if (QueenShyeedIsAlive() == 0)
{
if (chars instanceof L2PcInstance)
{
skillId = 6171;
handleNestBuff(chars, skillId);
}
}
}
}
if (_zoneTask != null)
{
_zoneTask.cancel(true);
_zoneTask = null;
}
}
private void handleNestBuff(L2Character character, int skillId)
{
if (skillId == 6169)
{
character.stopSkillEffects(6171);
}
if (skillId == 6171)
{
character.stopSkillEffects(6169);
}
if (character.getFirstEffect(skillId) == null)
{
L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
skill.getEffects(character, character);
}
}
}
public static void main(String[] args)
{
new QueenShyeed(-1, "QueenShyeed", "ai");
}
}
тему можно закрыть.
Сообщений: 56
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
5
а что то подобное под лыжу есть? и под этот код будет под ней работать?
Сообщений: 326
Тем: 28
Зарегистрирован: Nov 2010
Оффтоп
Оффтоп
krisadr, твоя аватарка - это твоей фото  =))
Сообщений: 831
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
1) этот код как раз таки и под лыжу...
2) да эта моя аватарка с контакта, тобиш моя фотка =) я знаю на таких форумах это не приветствуется но мне как то по х** xD
Сообщений: 11
Тем: 2
Зарегистрирован: Jun 2013
Репутация:
0
08-02-2013, 12:16 PM
(Сообщение последний раз редактировалось: 08-02-2013, 12:17 PM Sedoy.)
Великий и беспощадный Некромансер посетил эту тему и оставил это сообщение здесь.
Выдрал ai из другой сборки ai Queen Syeed, пытаюсь к своей прикрутить
Код: /*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package zone_scripts.StakatoNest;
import java.util.Collection;
import java.util.concurrent.Future;
import l2.brick.bflmpsvz.a.L2AttackableAIScript;
import l2.brick.gameserver.ThreadPoolManager;
import l2.brick.gameserver.datatables.SkillTable;
import l2.brick.gameserver.instancemanager.ZoneManager;
import l2.brick.gameserver.model.L2Skill;
import l2.brick.gameserver.model.actor.L2Character;
import l2.brick.gameserver.model.actor.L2Npc;
import l2.brick.gameserver.model.actor.instance.L2PcInstance;
import l2.brick.gameserver.model.actor.instance.L2RaidBossInstance;
import l2.brick.gameserver.model.zone.L2ZoneType;
import l2.brick.gameserver.network.serverpackets.ExSetCompassZoneCode;
public class QueenShyeed extends L2AttackableAIScript
{
private static final int QUEEN_SHYEED = 25514;
private static final int STAKATO_NEST_ZONE = 12030;
private long _QueenRespawn = 0;
private long _QueenStatus = 0; // 0 alive, 1 dead
protected Future<?> _zoneTask = null;
public QueenShyeed(int questId, String name, String descr)
{
super(questId, name, descr);
addKillId(QUEEN_SHYEED);
addEnterZoneId(STAKATO_NEST_ZONE);
addExitZoneId(STAKATO_NEST_ZONE);
try
{
_QueenRespawn = Long.valueOf(loadGlobalQuestVar("_QueenRespawn"));
_QueenStatus = Long.valueOf(loadGlobalQuestVar("_QueenStatus"));
}
catch (Exception e) {}
saveGlobalQuestVar("_QueenRespawn", String.valueOf(_QueenRespawn));
saveGlobalQuestVar("_QueenStatus", String.valueOf(_QueenStatus));
if (_QueenStatus == 0 && !checkIfQueenSpawned())
{
addSpawn(QUEEN_SHYEED, 79635, -55612, -5980, 0, false, 0);
startQuestTimer("QueenDespawn", 10800000, null, null);
}
else
startQuestTimer("QueenSpawn", _QueenRespawn - System.currentTimeMillis(), null, null);
_zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new stakatoBuffTask(), 30000, 30001);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equalsIgnoreCase("QueenSpawn"))
{
if (!checkIfQueenSpawned())
{
saveGlobalQuestVar("_QueenStatus", String.valueOf(0));
_QueenStatus = 0;
startQuestTimer("QueenDespawn", 10800000, null, null);
addSpawn(QUEEN_SHYEED, 79635, -55612, -5980, 0, false, 0);
}
}
else if (event.equalsIgnoreCase("QueenDespawn"))
{
final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
final Collection<L2Character> charsZone = zone.getCharactersInside().values();
for (L2Character c : charsZone)
{
if (!(c instanceof L2Npc))
continue;
if (((L2Npc) c).getNpcId() == QUEEN_SHYEED)
{
final long respawn = 86400000; // 24h
saveGlobalQuestVar("_QueenRespawn", String.valueOf(System.currentTimeMillis() + respawn));
saveGlobalQuestVar("_QueenStatus", String.valueOf(1));
_QueenStatus = 1;
startQuestTimer("QueenSpawn", respawn, null, null);
((L2RaidBossInstance) c).deleteMe();
}
}
}
else if (event.equalsIgnoreCase("CompassON"))
{
player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.ALTEREDZONE));
}
else if (event.equalsIgnoreCase("CompassOFF"))
{
player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.GENERALZONE));
}
return null;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
{
final long respawn = 86400000; // 24h
startQuestTimer("QueenSpawn", respawn, npc, null);
saveGlobalQuestVar("_QueenRespawn", String.valueOf(System.currentTimeMillis() + respawn));
saveGlobalQuestVar("_QueenStatus", String.valueOf(1));
_QueenStatus = 1;
return super.onKill(npc, killer, isPet);
}
@Override
public String onEnterZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2PcInstance)
{
startQuestTimer("CompassON", 5000, null, (L2PcInstance) character);
if (!checkIfPc(zone) && _zoneTask == null)
_zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new stakatoBuffTask(), 30000, 30001);
}
return super.onEnterZone(character, zone);
}
@Override
public String onExitZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2PcInstance)
{
startQuestTimer("CompassOFF", 5000, null, (L2PcInstance) character);
if (howManyPc(zone) == 1 && _zoneTask != null)
{
_zoneTask.cancel(true);
_zoneTask = null;
}
}
return super.onExitZone(character, zone);
}
private boolean checkIfQueenSpawned()
{
final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
final Collection<L2Character> charsZone = zone.getCharactersInside().values();
for (L2Character c : charsZone)
{
if (c instanceof L2Npc)
{
if (((L2Npc) c).getNpcId() == QUEEN_SHYEED)
return true;
}
}
return false;
}
private boolean checkIfPc(L2ZoneType zone)
{
final Collection<L2Character> inside = zone.getCharactersInside().values();
for (L2Character c : inside)
{
if (c instanceof L2PcInstance)
return true;
}
return false;
}
private int howManyPc(L2ZoneType zone)
{
int count = 0;
final Collection<L2Character> inside = zone.getCharactersInside().values();
for (L2Character c : inside)
{
if (c instanceof L2PcInstance)
count++;
}
return count;
}
private class stakatoBuffTask implements Runnable
{
public void run()
{
final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
if (howManyPc(zone) > 0)
{
int skillId = 0;
final Collection<L2Character> inside = zone.getCharactersInside().values();
for (L2Character c : inside)
{
if (_QueenStatus == 0)
{
if (c instanceof L2PcInstance)
{
skillId = 6169;
handleNestBuff(c, skillId);
}
else if (c instanceof L2Npc)
{
skillId = 6170;
handleNestBuff(c, skillId);
}
}
else
{
if (c instanceof L2PcInstance)
{
skillId = 6171;
handleNestBuff(c, skillId);
}
}
}
}
else if (_zoneTask != null)
{
_zoneTask.cancel(true);
_zoneTask = null;
}
}
private void handleNestBuff(L2Character c, int skillId)
{
if (skillId == 6169)
c.stopSkillEffects(6171);
else
c.stopSkillEffects(6169);
if (c.getFirstEffect(skillId) == null)
{
L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
skill.getEffects(c, c);
}
}
}
public static void main(String[] args)
{
new QueenShyeed(-1, "QueenShyeed", "zone_scripts");
}
}
гс ругается, как победить?
|