Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

[Гайд] Создаём бафера

Twain

Rawr Community
Рег
12 Окт 2015
Сообщения
168
Реакции
0
Twitch
thislsmind
Открываем папку D:\server\gameserver\data\jscript\custom - и тут создаем папочку 9999_NPCBuffer​
Далее тут же D:\server\gameserver\data\jscript\custom ищем файлик с названием __init__.py и у вас например там такое​
Код:
__all__ = [
'3995_echo',
'4000_ShadowWeapons',
'7000_HeroItems',
'7782_Recz',
'7785_HeroSF',
'8000_RaidbossInfo',
'7779_LazyNooblez',
'6050_KetraOrcSupport',
'6051_VarkaSilenosSupport'
]
print ""
print "importing custom data ..."
for name in __all__ :
try :
__import__('data.jscript.custom.'+name,globals(), locals(), ['__init__'], -1)
except:
print "failed to import quest : ",name
print "... done"
print ""


что вам нужно, ето вписать туда своего бафера и код должен получится следующий

Код
__all__ = [
'3995_echo',
'4000_ShadowWeapons',
'7000_HeroItems',
'7782_Recz',
'7785_HeroSF',
'8000_RaidbossInfo',
'7779_LazyNooblez',
'6050_KetraOrcSupport',
'6051_VarkaSilenosSupport',
'9999_NPCBuffer'
]
print ""
print "importing custom data ..."
for name in __all__ :
try :
__import__('data.jscript.custom.'+name,globals(), locals(), ['__init__'], -1)
except:
print "failed to import quest : ",name
print "... done"
print ""


все бафера вписали теперь копируем етот файлик _init_.py и вставляем сюда D:\server\gameserver\data\jscript\custom\9999_NPCBuffer
далее создаем здесь D:\server\gameserver\data\jscript\custom\9999_NPCBuffer файлики например 1.htm 2.htm ( ети файлы ето раззделы с бафами )
и так открываем штмл файлик через блокнот и пишем следующее

Цитата
<html>
<body>
<center>
<img src="L2UI_CH3.herotower_deco" width=256 height=32>
<font color="FF40FF">[COLOR=#ff0000]Бафер[/COLOR]</font><br>
<br>
<font color="00FFBB">Список баффоф:</font><br>
<tr><td><img src="L2UI.SquareWhite" width=260 height=1></tr></td><br>
<tr><td></td><td><button value="Лечить - 1k" action="bypass -h Quest 9999_NPCBuffer 6" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td></tr><br>
<tr><td></td><td><button value="CP - 1k" action="bypass -h Quest 9999_NPCBuffer 69" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td></tr><br>
<tr><td><img src="L2UI.SquareWhite" width=260 height=1></tr></td><br>
<tr>
<td><button value="[COLOR=#f4a460]Баффы[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]4.htm[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Танцы[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]2.htm[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="[COLOR=#ff8c00]Песни[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]3.htm[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Чанты[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]7.htm[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="Животные" action="bypass -h Quest 9999_NPCBuffer 8.htm" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="Дополнительно" action="bypass -h Quest 9999_NPCBuffer 9.htm" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<tr><td><img src="L2UI.SquareWhite" width=260 height=1></tr></td><br>
</center>
</body>
</html>
Красный - надпись Вверху менюшки бафера
Оранжевый - Надпись на картинке что бы зайти в список баффов
Голубой - название штмл при нажатие на картинку вас будет перемещать в тот штмл который вы указали
49905a57f978.jpg



Далее: настраиваем баффы

Открываем файлик 2.htm и вписываем например это:​
Код:
<html>
<body>
<center>
<img src="L2UI_CH3.herotower_deco" width=256 height=32>
<tr>
<td><font color="00FFBB">[COLOR=#ff0000]Танцы (20k каждый)[/COLOR]</font></td>
</tr>
<tr>
<td> </td>
</tr>
<tr><td><img src="L2UI.SquareWhite" width=260 height=1></tr></td>

<table width="260">
<tr>
<td><button value="[COLOR=#ff8c00]Warrior[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]27[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Inspiration[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]28[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="[COLOR=#f4a460]Mystic[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]29[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Fire[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]30[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="[COLOR=#f4a460]Fury[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#48d1cc]31[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Concentration[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]32[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="[COLOR=#f4a460]Light[/COLOR]" action="bypass -h Quest 9999_NPCBuffer 33" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Aqua Guard[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]34[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</tr>
<tr>
<td><button value="[COLOR=#f4a460]Earth Guard[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]35[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
<td><button value="[COLOR=#f4a460]Vampire[/COLOR]" action="bypass -h Quest 9999_NPCBuffer [COLOR=#00ffff]36[/COLOR]" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</table><br>
<tr><td><img src="L2UI.SquareWhite" width=260 height=1></tr></td><br>
<td><button value="Назад" action="bypass -h Quest 9999_NPCBuffer 1.htm" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
</center>
</body>
</html>

Крастный - Надпись вверху списка денсов
Оранжевый - Слово на картинке при нажатие на которую будет даватся Бафф
Голубой - етот номер вам ещо понадобится обязательно смотрите что бы они шли попорядку



Следующий Пункт у нас Добавление самих бафов :

открываем D:\server\gameserver\data\jscript\custom\9999_NPCBuffer и открывайте файлик __init__.py

Там у вас должно быть пусто так что вписываем туда примерно такое:​
Код:
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j import L2DatabaseFactory
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

qn = "9999_NPCBuffer"

NPC=[[COLOR=#ffff00]70022[/COLOR]]
ADENA_ID=[COLOR=#ffff00]57[/COLOR]
QuestId = 9999
QuestName = "NPCBuffer"
QuestDesc = "custom"
InitialHtml = "1.htm"

print "importing custom: 9999: NPCBuffer"

class Quest (JQuest) :

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


def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(ADENA_ID)
if count < 150000 or st.getPlayer().getLevel() < 1 :
htmltext = "<html><head><body>You dont have enough Adena,<br> or your level is too low. You must be 40 or higher.</body></html>"
else:
st.takeItems(ADENA_ID,0)
st.getPlayer().setTarget(st.getPlayer())

if event == "2":
st.takeItems(ADENA_ID,160000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4360,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4359,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4358,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4357,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4354,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4353,6),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4350,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4347,6),False,False)
st.getPlayer().restoreHPMP()
return "4.htm"
st.setState(COMPLETED)

if event == "3":
st.takeItems(ADENA_ID,80000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4352,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4351,6),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4355,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4356,3),False,False)
st.getPlayer().restoreHPMP()
return "4.htm"
st.setState(COMPLETED)

if event == "4":
st.takeItems(ADENA_ID,140000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4346,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4342,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4343,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4344,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4345,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4349,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4348,6),False,False)
st.getPlayer().restoreHPMP()
return "4.htm"
st.setState(COMPLETED)

if event == "5":
st.takeItems(ADENA_ID,400000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4360,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4359,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4358,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4357,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4354,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4353,6),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4350,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4348,6),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4352,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4351,6),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4355,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4356,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4346,4),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4342,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4343,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4344,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4345,3),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4349,2),False,False)
st.getPlayer().restoreHPMP()
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4347,6),False,False)
st.getPlayer().restoreHPMP()
return "4.htm"
st.setState(COMPLETED)

if event == "6":
st.takeItems(ADENA_ID,1000)
st.getPlayer().restoreHPMP()
return "1.htm"
st.setState(COMPLETED)

#[COLOR=#8b0000]Wind Walk[/COLOR]
[COLOR=#00ffff]if event == "7":[/COLOR]
[COLOR=#2e8b57]st.takeItems(ADENA_ID,25000)[/COLOR]
st.getPlayer().useMagic(SkillTable.getInstance().getInfo([COLOR=#c0c0c0]4342[/COLOR],[COLOR=#0000ff]2[/COLOR]),False,False)
st.getPlayer().restoreHPMP()
return "[COLOR=#ff00ff]5.htm[/COLOR]"
st.setState(COMPLETED)

#Decrease Weight
if event == "8":
st.takeItems(ADENA_ID,25000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(4343,3),False,False)
st.getPlayer().restoreHPMP()
return "5.htm"
st.setState(COMPLETED)


if htmltext != event:
st.setState(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(STARTED)
return InitialHtml

QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)
CREATED=State('Start',QUEST)
STARTED=State('Started',QUEST)
COMPLETED=State('Completed',QUEST)

QUEST.setInitialState(CREATED)

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

Розовый - На какую страницу будет возращатся Бафер при использование етого баффа вам нужно поставить например 3.htm
Синий - LvL Скила
Серый - ID Баффа ( Нужный Вам ID вы сможете узнать здесь D:\server\gameserver\data\stats\skills )
Зеленый - число Адены котрое требует для баффа
Желтый - ID Baffer
Красный - ID Итема который будет Братся при бафе
Коричневый - Название Баффа
Голубой - теперь вспоминаем те числа которые были при добавление Денсов ( смотрите сообщение выше обделено голубым цветом ) но я вылаживал там мануал как ставить денсы а нам нужны Бафы значит делаем ешо 1 шмл файлик и туда вписываем тоже самое вто и в денсах токо смените названиестранички Например 3.htm и место дансов пишите баффы ... и вот например вы пишите скил Wind Walk в новом файле сам вид баффа должен получится такой:​
Код:
<td><button value="Wind Walk" action="bypass -h Quest 9999_NPCBuffer 7" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br>
И так далее у нас Запрос в Базу

Создаете файл например buffer.sql и туда вставляете это:​

(70022,30842,'Buffer',1,'Buffer',1,'NPC.a_trader_FElf',8.00,24.00,70,'female','L2Npc',40,3862,1493,11.85,2.78,40,43,30,21,20,10,0,0,1314,470,780,382,278,0,333,0,
0,0,55,132,NULL,0,1,0,'LAST_HIT');

Зеленый - ID бафера
Красный - Имя бафера
Жолтый - Титул Бафера​
Бафер будет иметь вид как трейдер НПЦ Alexis

Далее открываете:
Navicat нажимаете правой кнопкой по вашей папке в которой все таблицы выбираете

Execute Batch File... нажимаете и указываете путь к вашему buffer.sql​
Конец сказки.


 
Насколько я понимаю, в коде надо почистить BB-codes, которыми, вероятно, подсвечивался синтаксис. Но здесь они не распарсились. И если взять и скопировать этот код (как будут делать большинство пользователей), он просто не заработает.
 
@zefi,
Хотелось обьяснить попонятней, в цветах и хорошо расписано, большинство моих гайдов для администраторов, обычные игроки просто даже не поймут что это и куда вписывать.
 
По моему вообще неактуальный гайд. Существует множество готовых баферов, которые нужно просто вставить в определенное место место. Лет 10 назад был бы актуален, в нынешних сборках вшиты баферы, телепорты, классмастерыи т.д.
 
@AleksRull, Этот гайд предназначен именно для создания своего, а не слизаного с кривой сборки.
 
@MRX, Есть много отдельных готовых баферов, которые не нужно "выдергивать из кривых сборок".
Очнись друг на дворе 21 век, на питоне никто больше не пишет сервера. Переделай мануал под java плюсану.

Совсем забыл, как же ты переделаешь если скопировать неоткуда. =(
 
Интересный гайд, но для лучшего понимания лучше все это разобрать на практике самому...
 
На какую сборку сервера оно станет?
 
Назад
Сверху