Skip to content
La2Base
Home
DownloadsWikiForumFAQ
Search
ruen
Sign up Login
HomeFilesWikiLogin
  • Home
  • Downloads
  • Wiki
  • FAQ
  • Contact Us
  • About
  • Rules
  • Privacy
  • Terms of Service

© 2026 la2base.com · All rights reserved

ruen
Forum/Дополнения к Lineage 2 Java серверам/Delvl нпс
Search

Delvl нпс

19 replies321 viewsCurrently viewing: 1
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/04/2009, 12:28 PM

Доброго времени суток!

Сборка la2base final.

Прошу помочь в написании НПС'а который будет сливать лвл игроку, убирая все скилы у игрока и

выдовать награду за содеянное.

Никак не могу прописать, что бы после слива ЛвЛ'а обнулялся скил лист у игрока.

Мои соображения по этому поводу: нужна команда которая будет чистить скил лист (st.***)

Скрипт:

Раскрывающийся текст
import sysfrom net.sf.l2j.gameserver.model.quest import State


from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver.model import L2ItemInstance
from net.sf.l2j.gameserver.model.base import Experience
from net.sf.l2j.gameserver.serverpackets import CreatureSay

qn = "7105_Delevel"

NPC=[50015]
MEDAL = 9301
QuestId = 7105
QuestName = "Delevel"
QuestDesc = "custom"
InitialHtml = "1.htm"

print "Delevel loading.........."

class Quest (JQuest) :

 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


 def onEvent(self,event,st):
  htmltext = event

  if st.getPlayer().getLevel() < 79 :
  htmltext = "2.htm"
  
  elif st.getQuestItemsCount(MEDAL) < 1 : 
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 2, "Delevel Manager", "Jums reikia 1 Glittering Medal norint naudotis sia funkcija!"))

  elif st.getPlayer().getKarma() > 0 :
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 2, "Delevel Manager", "Negalima sumazinti level turedamas karmos!"))

  elif st.getPlayer().getPvpFlag() != 0 :
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 2, "Delevel Manager", "Jus negalite mazinti savo level, kai esate kovoje!"))

  elif st.getPlayer().isAttackingNow() == True :
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 2, "Delevel Manager", "Nemuskite manes!!!!"))

  elif st.getPlayer().getLevel() < 48 :
  SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer(
))
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 2, "Delevel Manager", "Greater Shieldo galios apsaugokit! Tikiuosi jis tau pades :)"))

  else:
  st.getPlayer().setTarget(st.getPlayer())
   
  if event == "2":
  st.takeItems(MEDAL,1)
  st.getPlayer().getStat().removeExpAndSp((st.getPlayer().getExp() - Experience.LEVEL[st.getPlayer().getStat().getLevel() - 79]),0)
  st.getPlayer().sendPacket(CreatureSay(st.getPlayer().getObjectId(), 3, "Delevel Manager", "Jusu level sumazintas 1 level"))
  return "1.htm"
  st.setState(State.COMPLETED)
  st.exitQuest(1)
 
   
  if htmltext != event:
  st.setState(State.COMPLETED)
  st.exitQuest(1)
  return htmltext

 def onTalk (self,npc,player):
  st = player.getQuestState(qn)
  htmltext = "<html><head><body>I have nothing to say to you</body></html>"
  st.setState(State.STARTED)
  return InitialHtml

QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)

for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)

Прошу поделиться соображениями по этому поводу, если таковые имеются.

Заранее спс.

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/06/2009, 05:08 AM

Проблема не решена, тема всё ещё актуальна.

0
Никита
Никита

User

Ветеран

Posts: 580

На форуме с: 05/30/2008

Репутация: +696

Рейтинг: 0

· 10/06/2009, 05:18 AM

Может поможет, глянь как класс менеджер выдает скиллы, только сделай все наоборот.

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/08/2009, 05:48 PM

вынужден снова апать, ответ и компромис к сожелению не найден.

0
Никита
Никита

User

Ветеран

Posts: 580

На форуме с: 05/30/2008

Репутация: +696

Рейтинг: 0

· 10/08/2009, 05:54 PM

Глянь может тут что найдешь,а так если бы знал то помог.

Код
_http://www.l2jserver.com/svn/trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/09/2009, 03:59 PM

впринцепи возможно сделать через сброс профы, мб ктото знает как вписать в скрипт изменение профы на 1, но это более геморно, ибо над делать привязку на принодлежность к той или иной профе...

0
CKA3KART
CKA3KART

User

Бывалый

Posts: 359

На форуме с: 01/05/2010

Репутация: +41

Рейтинг: 0

· 10/09/2009, 04:15 PM

-Diman-: впринцепи возможно сделать через сброс профы, мб ктото знает как вписать в скрипт изменение профы на 1, но это более геморно, ибо над делать привязку на принодлежность к той или иной профе...


наверное на подобии этого

Раскрывающийся текст

Collection<L2SkillLearn> skillTree = SkillTreeTable.getInstance().getAllowedSkills(getClassId());
// loop through all skills of player
for (L2Skill skill : getAllSkills())
{
int skillid = skill.getId();
foundskill = false;
// loop through all skills in players skilltree
for (L2SkillLearn temp : skillTree)
{
// if the skill was found and the level is possible to obtain for his class everything is ok
if(temp.getId()==skillid)
{
foundskill = true;
}
}

// exclude noble skills
if(isNoble() && (skillid >= 325 && skillid <=327) || (skillid >= 1323 && skillid <=1327 ))
{
foundskill = true;
}
// exclude hero skills
// temp workaround till heroskilltable works properly
if(isHero() && ((skillid >= 1374 && skillid <= 1376) || (skillid >=395 && skillid <= 396)))
{
foundskill = true;
}
// exclude cursed weapon skills
if(isCursedWeaponEquiped() && skillid == CursedWeaponsManager.getInstance().getCursedWeapon(_cursedWeaponEquipedId).getSk
illId())
{
foundskill = true;
}
// exclude clan skills
if(getClan()!=null && (skillid >= 370 && skillid <= 391))
{
foundskill = true;
}
// exclude seal of ruler / build siege hq
if(getClan()!=null && (skillid>=246 && skillid<=247))
if(getClan().getLeaderId()==getObjectId())
foundskill = true;
if( getKarma() >= 900000 && skillid == 3603)
{
foundskill = true;
}
// exclude fishing skills and common skills + dwarfen craft
if(skillid>=1312 && skillid<=1322)
{
foundskill = true;
}
if(skillid>=1368 && skillid<=1373)
{
foundskill = true;
}
// exclude sa / enchant bonus / penality etc. skills
if(skillid>=3000 && skillid<7000)
{
foundskill = true;
}

// remove skill and do a lil log message
if(!foundskill)
{
removeSkill(skill);

}
}

0
V
VlLight

User

Бывалый

Posts: 235

На форуме с: 05/20/2009

Репутация: +63

Рейтинг: 0

· 10/09/2009, 05:38 PM

По-моему Abst где-то постил код для делевела

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/09/2009, 05:43 PM

Вы не так поняли, проблема не делвл сделать, а убрать скилы 2 и 3 профы.

0
CKA3KART
CKA3KART

User

Бывалый

Posts: 359

На форуме с: 01/05/2010

Репутация: +41

Рейтинг: 0

· 10/09/2009, 05:50 PM

-Diman-: Вы не так поняли, проблема не делвл сделать, а убрать скилы 2 и 3 профы.


я дал код убирания лишних скилов

0
V
VlLight

User

Бывалый

Posts: 235

На форуме с: 05/20/2009

Репутация: +63

Рейтинг: 0

· 10/09/2009, 06:01 PM

Кроме того, в adminskill.java есть пример удаления всех скиллов и выдачи тех, которые положены по уровню.

ГМ-команды admin_remove_all_skills, admin_give_all_skills. Последняя вроде бы должна выдавать скиллы, положенные по текущему уровню

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/09/2009, 06:14 PM

CKA3KA: я дал код убирания лишних скилов


Благодарю за вариант пытаюсь привентить к скрипту, пока безуспешно...

VlLight: Кроме того, в adminskill.java есть пример удаления всех скиллов и выдачи тех, которые положены по уровню.

ГМ-команды admin_remove_all_skills, admin_give_all_skills. Последняя вроде бы должна выдавать скиллы, положенные по текущему уровню



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

0
Gradesk
Gradesk

User

Ветеран

Posts: 639

На форуме с: 04/09/2008

Репутация: +619

Рейтинг: 0

· 10/09/2009, 06:31 PM

-Diman-: Благодарю за вариант пытаюсь привентить к скрипту, пока безуспешно...




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

Почему это?
просто надо посторатся...
каждая команда несёт в себе какое то действие, а это действие можно спокойно (ну почти) прикрутить к квесту... так сказать "шапку" сменить...

0
V
VlLight

User

Бывалый

Posts: 235

На форуме с: 05/20/2009

Репутация: +63

Рейтинг: 0

· 10/09/2009, 06:39 PM

-Diman-: про данные команды я знаю, но их же никак не реализовать в скрипте, что б они автоматом вызывались на чара


Любой метод Явы можно вызвать из Питона. Возможно понадобится импортировать нужный пакет

0
Gradesk
Gradesk

User

Ветеран

Posts: 639

На форуме с: 04/09/2008

Репутация: +619

Рейтинг: 0

· 10/09/2009, 06:42 PM

Соглашусь с "VlLight"...
По идеи при желании можно что угодно воткнуть в квест... единственное ограничение это то что чар должен стоять возле НПСа (и то не всегда)...

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 10/09/2009, 06:46 PM

хм, спс за напутствие, получается что

Раскрывающийся текст
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver.model import L2ItemInstance
from net.sf.l2j.gameserver.model.base import Experience
from net.sf.l2j.gameserver.serverpackets import CreatureSay

qn = "7105_Delevel"

NPC=[50015]
MEDAL = 9302
QuestId = 7105
QuestName = "Delevel"
QuestDesc = "custom"
InitialHtml = "1.htm"

print "Delevel loading.........."

class Quest (JQuest) :

 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


 def onEvent(self,event,st):
  htmltext = event

  if st.getPlayer().getLevel() < 79 :
  htmltext = "2.htm"
 
  elif st.getQuestItemsCount(MEDAL) < 1 :
  htmltext = "2.htm"

  elif st.getPlayer().getKarma() > 0 :
  htmltext = "2.htm"

  elif st.getPlayer().getPvpFlag() != 0 :
  htmltext = "2.htm"

  elif st.getPlayer().isAttackingNow() == True :
  htmltext = "2.htm"

  elif st.getPlayer().getLevel() < 80 :
  SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer(
))
  htmltext = "2.htm"

  else:
  st.getPlayer().setTarget(st.getPlayer())
   
  if event == "2":
  st.giveItems(MEDAL,1)
  st.getPlayer().getStat().removeExpAndSp((st.getPlayer().getExp() - Experience.LEVEL[st.getPlayer().getStat().getLevel() - 79]),0)

st.****
   
  htmltext = "3.htm"
  st.setState(State.COMPLETED)
  st.exitQuest(1)
 
   
  if htmltext != event:
  st.setState(State.COMPLETED)
  st.exitQuest(1)
  return htmltext

 def onTalk (self,npc,player):
  st = player.getQuestState(qn)
  htmltext = "<html><head><body>I have nothing to say to you</body></html>"
  st.setState(State.STARTED)
  return InitialHtml

QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)

for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)


после st.getPlayer().getStat().removeExpAndSp((st.getPlayer().getExp() - Experience.LEVEL[st.getPlayer().getStat().getLevel() - 79]),0)

вписываем команду типо st.getPlayer().getStat().admin_remove_all_skills



0
V
VlLight

User

Бывалый

Posts: 235

На форуме с: 05/20/2009

Репутация: +63

Рейтинг: 0

· 10/09/2009, 07:05 PM

нед.
Вот кусок кода оттуда, который удаляет все скиллы

Код
if (command.equals("admin_remove_all_skills"))
        {
            if (activeChar.getTarget() instanceof L2PcInstance)
            {
                L2PcInstance player = (L2PcInstance) activeChar.getTarget();
                for (L2Skill skill : player.getAllSkills())
                    player.removeSkill(skill);
                activeChar.sendMessage("You removed all skills from " + player.getName());
                player.sendMessage("Admin removed all skills from you.");
                player.sendSkillList();
                player.broadcastUserInfo();
            }

Объект player у нас уже есть в квесте
Осталось узнать, как организовать на Питоне этот цикл
Код
for (L2Skill skill : player.getAllSkills())
player.removeSkill(skill);


Я не знаю :)


А можно же как-то и на Яве квесты писать.

0
V
VlLight

User

Бывалый

Posts: 235

На форуме с: 05/20/2009

Репутация: +63

Рейтинг: 0

· 10/09/2009, 07:45 PM

Или, не заморачиваясь на Питоне, можно создать в ядре свой метод.. и уже его вызвать из Питона

0
Дмитрий
Дмитрий

User

Участник

Posts: 94

На форуме с: 12/09/2008

Репутация: +28

Рейтинг: 0

· 11/01/2009, 09:54 AM

поднимаю тему, т.к. возможно у кого-либо появились идей по этому поводу.
Проблема ещё актуальна.

0
Войдите или зарегистрируйтесь чтобы ответить