Перейти к содержанию
Авторизация  
Nice

Сurse Death Link Не Открывает Сундуки!

Рекомендуемые сообщения

Здравствуйте ув. знатоки :)

Нужна Ваша помощь касательно сундуков в сборке C4. Проблема собственно заключается в том, что сундуки не открываются при нанесении большого урона. Они просто исчезают.

Подскажите в каком файле исходников и что отвечает за подобную ерунду. Буду весьма признателен.

 

Сборка L2jLisvus, Chronicle 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте ув. знатоки :)

Нужна Ваша помощь касательно сундуков в сборке C4. Проблема собственно заключается в том, что сундуки не открываются при нанесении большого урона. Они просто исчезают.

Подскажите в каком файле исходников и что отвечает за подобную ерунду. Буду весьма признателен.

 

Сборка L2jLisvus, Chronicle 4

 

Есть исходы? Покажите AI Chest-ов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите АИ сундуков.

 

Спасибо :) Но вот еще, я не очень силен в Java. Подскажите где и что менять..

Вот мой Chests.py

 

# # # # # # # # # # #

# Chest AI implementation.

# Written by Fulminus

# # # # # # # # # # #

import sys

from net.sf.l2j.gameserver.ai import CtrlIntention

from net.sf.l2j.gameserver.lib import Rnd;

from net.sf.l2j.gameserver.model.quest import QuestState

from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

 

SKILL_DELUXE_KEY = 2229

 

#Base chance for BOX to be opened

BASE_CHANCE = 100

 

# Percent to decrease base chance when grade of DELUXE key not match

LEVEL_DECREASE = 40

 

# Chance for a chest to actually be a BOX (as opposed to being a mimic).

IS_BOX = 40

 

class chests(JQuest) :

 

# init function. Add in here variables that you'd like to be inherited by subclasses (if any)

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

# firstly, don't forget to call the parent constructor to prepare the event triggering

# mechanisms etc.

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

 

self.chests = [13100,13101,13102,13103,13104,13105,13106,13107,13108,13109, \

13110,13111,13112,13113,13114,13115,13116,13117,13118,13119, \

13120,13121,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810, \

1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822]

 

for i in self.chests :

self.addSkillUseId(i)

self.addAttackId(i)

 

def onSkillUse (self,npc,player,skill,isPet):

npcId = npc.getNpcId()

skillId = skill.getId()

skillLevel= skill.getLevel()

 

# check if the npc and skills used are valid for this script. Exit if invalid.

if npcId not in self.chests : return

 

# if this has already been interacted, no further ai decisions are needed

# if it's the first interaction, check if this is a box or mimic

if not npc.isInteracted() :

npc.setInteracted()

if Rnd.get(100) < IS_BOX :

# if it's a box, either it will be successfully openned by a proper key, or instantly disappear

if skillId == SKILL_DELUXE_KEY :

# check the chance to open the box

keyLevelNeeded = int(npc.getLevel()/10)

levelDiff = keyLevelNeeded - skillLevel

if levelDiff < 0 :

levelDiff = levelDiff * (-1)

chance = BASE_CHANCE - levelDiff * LEVEL_DECREASE

 

# success, pretend-death with rewards: npc.reduceCurrentHp(99999999, player)

if Rnd.get(100) < chance :

npc.setMustRewardExpSp(False)

npc.setSpecialDrop();

npc.reduceCurrentHp(99999999, player)

return

# used a skill other than chest-key, or used a chest-key but failed to open: disappear with no rewards

npc.onDecay()

else :

attacker = player

if npc.getAttackByList().contains(player.getPet()):

attacker = player.getPet()

npc.setRunning()

npc.addDamageHate(attacker,0,999)

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker)

return

 

def onAttack(self,npc,player,damage,isPet) :

npcId = npc.getNpcId()

# check if the npc and skills used are valid for this script. Exit if invalid.

if npcId not in self.chests : return

 

# if this was a mimic, set the target, start the skills and become agro

if not npc.isInteracted() :

npc.setInteracted()

if Rnd.get(100) < IS_BOX :

npc.onDecay()

else : # if this weren't a box, upon interaction start the mimic behaviors...

# todo: perhaps a self-buff (skill id 4245) with random chance goes here?

attacker = player

if isPet:

attacker = player.getPet()

npc.setRunning()

npc.addDamageHate(attacker,0,(damage*100)/(npc.getLevel()+7))

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker)

return

 

# now call the constructor (starts up the ai)

QUEST = chests(-1,"chests","ai")

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо :) Но вот еще, я не очень силен в Java. Подскажите где и что менять..

Вот мой Chests.py

 

Ну смотрите, всё верно.

 

def onAttack(self,npc,player,damage,isPet) :

npcId = npc.getNpcId()

# check if the npc and skills used are valid for this script. Exit if invalid.

if npcId not in self.chests : return

 

При Атаке сунука:

if Rnd.get(100) < IS_BOX : #Это бокс, он может быть открыт ключом

npc.onDecay() #Удаляем его

 

 

Всё верно, бьём box - вызываем onDecay() - удаляем его из игрового мира.

Изменено пользователем YuraAAA1
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну смотрите, всё верно.

 

def onAttack(self,npc,player,damage,isPet) :

npcId = npc.getNpcId()

# check if the npc and skills used are valid for this script. Exit if invalid.

if npcId not in self.chests : return

 

При Атаке сунука:

if Rnd.get(100) < IS_BOX : #Это бокс, он может быть открыт ключом

npc.onDecay() #Удаляем его

 

 

Всё верно, бьём box - вызываем onDecay() - удаляем его из игрового мира.

 

То есть все верно указано? и должны открываться при нанесении большого урона?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите. Сундук может быть Box (открывается, с точками), а может быть Chest (обычный сундук, дерётся).

 

Если Вы атакуете Box - он исчезает, как Вы и описали (onDecay()). Если Вы атакуете Chest - он начинает драться с Вами. От количества урона не зависит.

А как Вы хотите изменить? Чтобы он открывался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По acis-у Box не просто исчезает, а кастует "суицид". Т.е. взрывается. Но ни в коем случае он не открывается при атаке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите. Сундук может быть Box (открывается, с точками), а может быть Chest (обычный сундук, дерётся).

 

Если Вы атакуете Box - он исчезает, как Вы и описали (onDecay()). Если Вы атакуете Chest - он начинает драться с Вами. От количества урона не зависит.

А как Вы хотите изменить? Чтобы он открывался?

 

Я почти на всех серверах С4 видел такой эффект, когда маг (СХ, Некр) сливаются под CDL (Curse Death Link) и с одного удара убивают сундук который должен открываться ключом (то есть сундук Box) и с него имеется дроп. Если же с одного удара не удалось убить, сундук исчезает.

Возможно это баг такой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По acis-у Box не просто исчезает, а кастует "суицид". Т.е. взрывается. Но ни в коем случае он не открывается при атаке.

В С4 сундук должен открываться при смерти, если он умирает с одного удара.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я почти на всех серверах С4 видел такой эффект, когда маг (СХ, Некр) сливаются под CDL (Curse Death Link) и с одного удара убивают сундук который должен открываться ключом (то есть сундук Box) и с него имеется дроп. Если же с одного удара не удалось убить, сундук исчезает.

Возможно это баг такой?

 

Я думаю, это баг. Такого не должно быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я почти на всех серверах С4 видел такой эффект, когда маг (СХ, Некр) сливаются под CDL (Curse Death Link) и с одного удара убивают сундук который должен открываться ключом (то есть сундук Box) и с него имеется дроп. Если же с одного удара не удалось убить, сундук исчезает.

Возможно это баг такой?

Оффлайк. Вроде бы в С5 были изменения по сундукам, и они перестали открываться таким образом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, это баг. Такого не должно быть.

Не баг. Можно проверить на ПТС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не баг. Можно проверить на ПТС.

 

Есть PTS с4, но понятия не имею где искать Ai :)

 

Как сделать то? чтоб правильно работало. Подскажите пожалуйста.

Изменено пользователем Nice

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так мне поможет кто-то с данной проблемой? Тема актуальна..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так мне поможет кто-то с данной проблемой? Тема актуальна..

 

Т.е. Вам нужно сделать так, что если сундук умирает с одного удара, он должен открыться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. Вам нужно сделать так, что если сундук умирает с одного удара, он должен открыться?

 

Да, именно так и нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, именно так и нужно.

 

Не сильно в питоне разбираюсь, но да ладно.

 

Вместо onDecay() в методе onAttack пишем

 

keyLevelNeeded = int(npc.getLevel()/10)
levelDiff = keyLevelNeeded - 9 #9 - должен быть уровень скилла видимо. Экспериментируйте
if levelDiff < 0 :
levelDiff = levelDiff * (-1)
chance = BASE_CHANCE - levelDiff * LEVEL_DECREASE

# success, pretend-death with rewards: npc.reduceCurrentHp(99999999, player)
if Rnd.get(100) < chance :
npc.setMustRewardExpSp(False)
npc.setSpecialDrop();
npc.reduceCurrentHp(99999999, player)
return

npc.onDecay()

 

Помните, что python чувствителен к отступам, по-этому Вы должны внимательно всё расставить

Изменено пользователем YuraAAA1
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://postimg.org/image/rlmad4lp3/

 

P.S. Не знаю как прикрепить изображение прямо на форум :(

Изменено пользователем YuraAAA1
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://postimg.org/image/rlmad4lp3/

 

P.S. Не знаю как прикрепить изображение прямо на форум :(

 

Спасибо, но есть одна загвоздочка. Если я правильно понял по изображению, Вы отключаете вообще возможность открыть сундук ключом?

 

Нужно чтоб работали оба варианта, и уроном и ключом.

Но все равно спасибо, буду крутить как-то код)

Изменено пользователем Nice

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

даш сайт серва? покажу тебе прикол, отобьет желание открывать что то на ц4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, но есть одна загвоздочка. Если я правильно понял по изображению, Вы отключаете вообще возможность открыть сундук ключом?

 

Нужно чтоб работали оба варианта, и уроном и ключом.

Но все равно спасибо, буду крутить как-то код)

 

Нет нет нет. Смотрите. Мы с Вами изменили только лишь onAttack метод. Это метод обратного вызова. Грубо говоря, он срабатывает тогда и только тогда, когда Вы лупите сундук. Что же происходит по коду:

 

Рандомно считаем, box это (с точками) или же обычный chest. Если второе, то нам всё равно, код остаётся прежний (лупим игрока или же его пета, смотря кто ударил).

А вот если это box, то начинается магия.

Мы считаем шанс открытия и открываем в зависимости от шанса. И в любом случае сундук пропадёт.

 

И я уже вижу свою ошибку. Ещё нужно damage проверять, так как сейчас он будет открываться даже при демейдже 1. Ну попробуйте так, если получится, докрутим с Вами расчёт урона.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет нет нет. Смотрите. Мы с Вами изменили только лишь onAttack метод. Это метод обратного вызова. Грубо говоря, он срабатывает тогда и только тогда, когда Вы лупите сундук. Что же происходит по коду:

 

Рандомно считаем, box это (с точками) или же обычный chest. Если второе, то нам всё равно, код остаётся прежний (лупим игрока или же его пета, смотря кто ударил).

А вот если это box, то начинается магия.

Мы считаем шанс открытия и открываем в зависимости от шанса. И в любом случае сундук пропадёт.

 

И я уже вижу свою ошибку. Ещё нужно damage проверять, так как сейчас он будет открываться даже при демейдже 1. Ну попробуйте так, если получится, докрутим с Вами расчёт урона.

 

Дело в следующем.. Изменив таким образом AI сундуков, они все стали Chest. Не 1 сундук не открывается ключом). + сундуки перестали передвигаться, стоят на месте и дергаются.

И кстати GS начал бить ошибку..

Failed to import ai : chests

Изменено пользователем Nice

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Упс..! Это я тупица :D в строках кода, поставил табуляцию вместо пробелов.. А так вроде бы работает :) тестирую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не сильно в питоне разбираюсь, но да ладно.

 

Вместо onDecay() в методе onAttack пишем

 

keyLevelNeeded = int(npc.getLevel()/10)
levelDiff = keyLevelNeeded - 9 #9 - должен быть уровень скилла видимо. Экспериментируйте
if levelDiff < 0 :
levelDiff = levelDiff * (-1)
chance = BASE_CHANCE - levelDiff * LEVEL_DECREASE

# success, pretend-death with rewards: npc.reduceCurrentHp(99999999, player)
if Rnd.get(100) < chance :
npc.setMustRewardExpSp(False)
npc.setSpecialDrop();
npc.reduceCurrentHp(99999999, player)
return

npc.onDecay()

 

Помните, что python чувствителен к отступам, по-этому Вы должны внимательно всё расставить

 

Что-то все равно пропадают, нанес 20к маг. дамага, а он все равно пропал не открывшись. :(

Изменено пользователем Nice

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...