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

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

Ответ
Опции темы
Непрочитано 01.08.2009, 06:02   #1
Пользователь

Автор темы (Топик Стартер) Вместе реализуем сертификацию в Gracia Final?

Вообщем я порылся по инету и не нашел еще ни 1 шаровой сборки финалки, где были бы хотя бы зачатки рабочей сертефикации, почти везде было так:
Цитата:
<a action="bypass -h npc_%objectId%_Chat 0">Get certified.</a>
Что, как я понял, означает возврат к самому первому диалогу с данным НПЦ..

Ну так вот, я предлагаю сделать вместе сертефикацию, отталкияваясь от рабочей сертефикации в сборках ct2.2, потом то, что получилось можно выложить в шару под хайдом..

Вообщем от скрипт от л2дрим, отвечающий за сертефикацию в ct2.2:
[hide=10][SPOILER]package services;

import java.util.HashMap;

import l2d.Config;
import l2d.ext.multilang.CustomMessage;
import l2d.ext.scripts.Functions;
import l2d.ext.scripts.ScriptFile;
import l2d.game.model.L2Object;
import l2d.game.model.L2Player;
import l2d.game.model.L2Skill;
import l2d.game.model.L2SubClass;
//import l2d.game.model.PcInventory;
//import l2d.game.model.PcWarehouse;
import l2d.game.model.quest.QuestState;
import l2d.game.model.instances.L2ItemInstance;
import l2d.game.network.serverpackets.AcquireSkillList;
import l2d.game.network.serverpackets.SystemMessage;
import l2d.game.network.serverpackets.NpcHtmlMessage;
import l2d.game.network.serverpackets.SkillList;
import l2d.game.network.serverpackets.UserInfo;
import l2d.game.tables.SkillTable;
import static l2d.game.tables.SkillTable.SubclassSkills.*;

public class SubSkills extends Functions implements ScriptFile
{
public static L2Object self;
public static L2Object npc;

public boolean checkSub65( L2Player cha )
{
boolean ret = true;
if( !cha.isSubClassActive() )
{
NpcHtmlMessage npchtml = new NpcHtmlMessage( cha.getTargetId() );
npchtml.setFile( "data/html/villagemaster/subclass/skillcert_needsub.htm" );
cha.sendPacket( npchtml );
ret = false;
}
else if( cha.getLevel() < 65 )
{
NpcHtmlMessage npchtml = new NpcHtmlMessage( cha.getTargetId() );
npchtml.setFile( "data/html/villagemaster/subclass/skillcert_needsub65.htm" );
cha.sendPacket( npchtml );
ret = false;
}
return ret;
}

public void showHTMLGotAllBooks( L2Player cha )
{
NpcHtmlMessage npchtml = new NpcHtmlMessage( cha.getTargetId() );
npchtml.setFile( "data/html/villagemaster/subclass/skillcert_learnedall.htm" );
cha.sendPacket( npchtml );
}

public void giveBookToChar( L2Player player, int bookItemId )
{
player.getInventory().addItem( bookItemId, 1, 0, "By NPC" );
player.sendPacket( new SystemMessage( SystemMessage.YOU_HAVE_OBTAINED_S1 ).addItemName( bookItemId ) );
}

public void certificate_level( int level, int book_item_id, int sub_id )
{
String var_name = "SubSkillBook_" + String.valueOf(sub_id) + "_" + String.valueOf(level); // "SubSkillBook_1_65"
L2Player cha = (L2Player)self;
if( !checkSub65( cha ) ) return;
String booksreceived = cha.getVar( var_name );
if( booksreceived == null )
{
cha.setVar( var_name, "0" );
booksreceived = "0";
}
int ibooksreceived = Integer.parseInt( booksreceived );
int couldReceiveBooks = 0;
for( L2SubClass subClass : cha.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
if( subClass.getLevel() >= level ) couldReceiveBooks++;
}
}
if( ibooksreceived < couldReceiveBooks )
{
booksreceived = String.valueOf( ibooksreceived + 1 );
cha.setVar( var_name, booksreceived );
giveBookToChar( cha, book_item_id );
}
else showHTMLGotAllBooks( cha );
}

public void certificate65()
{
L2Player player = (L2Player)self;
int sub_id=-1;
for( L2SubClass subClass : player.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
sub_id=subClass.getNumSub();
}
}
certificate_level( 65, CertificateEmergentAbility, sub_id );
}

public void certificate70()
{
L2Player player = (L2Player)self;
int sub_id=-1;
for( L2SubClass subClass : player.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
sub_id=subClass.getNumSub();
}
}
certificate_level( 70, CertificateEmergentAbility, sub_id ); // na 65 i l0 lvl 1 i tot je item
}

public void certificateClassSpecific75()
{
L2Player player = (L2Player)self;
int class_id = player.getClassId().getId();
int item_id = 0;
int sub_id=-1;
for( int[] tmp : SkillTable.SubclassSkills.classes_certificates )
{
if( tmp[0] == class_id )
{
item_id = tmp[1];
break;
}
}
for( L2SubClass subClass : player.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
sub_id=subClass.getNumSub();
}
}
certificate_level( 75, item_id, sub_id); //s item raznii v zavisimosti ot classa
}

public void certificateMaster75()
{
L2Player player = (L2Player)self;
int sub_id=-1;
for( L2SubClass subClass : player.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
sub_id=subClass.getNumSub();
}
}
certificate_level( 75, CertificateMasterAbility, sub_id );
}

public void certificate80()
{
L2Player player = (L2Player)self;
int sub_id=-1;
for( L2SubClass subClass : player.getSubClasses().values() )
{
if( subClass.isActive() && !subClass.isBase())
{
sub_id=subClass.getNumSub();
}
}
int class_id = player.getClassId().getId();
int item_id = 0;
for( int[] tmp : SkillTable.SubclassSkills.classes_certificates )
{
if( tmp[0] == class_id )
{
item_id = tmp[2];
break;
}
}
certificate_level( 80, item_id, sub_id );
}

/**
* На основе имеющихся книг,формируем список скилов
* @author Zombie
*/
public void showList()
{
L2Player player = (L2Player)self;
if( !Config.ALLOW_LEARN_TRANS_SKILLS_WO_QUEST )
{
QuestState qs = player.getQuestState( "_136_MoreThanMeetsTheEye" );
if( qs == null || !qs.isCompleted() )
{
show( "You must complete the More Than Meets the Eye transformation quest in order to receive the subclass certification and to properly acquire the skill as your main class.", player );
return;
}
}

if(player.isSubClassActive())
{
/* вот всяко какоенибуть систем мессадж предусмотренно для этого*/
player.sendMessage("You must do it in main class");
player.sendActionFailed();
return;
}

AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.TRANSFORMATION);
int added_skills = 0;

// add subskills at level 65, 70
// в этом блоке какие-то глюки
if( player.getInventory().getCountOf(CertificateEmerge ntAbility) > 0 )
{
int Emergent_Ability_Attack = player.getSkillLevel(631);
int Emergent_Ability_Defense = player.getSkillLevel(632);
int Emergent_Ability_Empower = player.getSkillLevel(633);
int Emergent_Ability_Magic_Defense = player.getSkillLevel(634);
/* Если скила нет у чара то getSkillLevel() вернёт -1
я понимаю что решил проблему по индусски,но пох. (c) Zombie */
if( Emergent_Ability_Attack>0 ) Emergent_Ability_Attack++;
else Emergent_Ability_Attack = 1;

if( Emergent_Ability_Defense>0 ) Emergent_Ability_Defense++;
else Emergent_Ability_Defense = 1;

if( Emergent_Ability_Empower>0 ) Emergent_Ability_Empower++;
else Emergent_Ability_Empower = 1;

if( Emergent_Ability_Magic_Defense>0 ) Emergent_Ability_Magic_Defense++;
else Emergent_Ability_Magic_Defense = 1;

// if( Emergent_Ability_Attack<6 ) ?
if( Emergent_Ability_Attack<=6)
{
asl.addSkill( 631, Emergent_Ability_Attack, 6, 0, 0 );
added_skills++;
}
if( Emergent_Ability_Defense<=6)
{
asl.addSkill( 632, Emergent_Ability_Defense, 6, 0, 0 );
added_skills++;
}
if( Emergent_Ability_Empower<=6)
{
asl.addSkill( 633, Emergent_Ability_Empower, 6, 0, 0 );
added_skills++;
}
if( Emergent_Ability_Magic_Defense<=6)
{
asl.addSkill( 634, Emergent_Ability_Magic_Defense, 6, 0, 0 );
added_skills++;
}
// todo

}

// add class based 75 lvl, 80 - lvl skills
for( int[] tmp : SkillTable.SubclassSkills.skills_certificates_leve ls )
{
if( tmp[2] >= 75 )
{
if( player.getInventory().getCountOf( tmp[1] ) > 0 )
{
if(player.getSkillLevel(tmp[0])==-1)
{
asl.addSkill( tmp[0], 1, 1, 0, 0 );
added_skills++;
}
}
}
}

if( added_skills > 0 ) player.sendPacket( asl );
asl = null;

if( added_skills == 0 ) player.sendMessage( "You have no sub skills to learn." );
}

public static boolean canLearn( L2Player player, int skillId )
{
return true; // TODO: проверку бы ))
}

public static void learnSkill(L2Player player, Integer skill_id)
{
if( player.isSubClassActive() )
{
player.sendActionFailed();
return;
}

int certificate_id = SkillTable.SubclassSkills.getCertificateForSkill(s kill_id);
L2ItemInstance certificate = player.getInventory().findItemByItemId( certificate_id );
if( (certificate == null) || (certificate.getIntegerLimitedCount() < 1) )
{
player.sendPacket( new SystemMessage( SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEAR N_SKILLS ) );
return;
}
L2ItemInstance ri = player.getInventory().destroyItem( certificate, 1, true );
player.sendPacket( new SystemMessage( SystemMessage.S1_HAS_DISAPPEARED ).addItemName( ri.getItemId() ) );

//L2Skill old_skill = null;
// if( player.getActiveClass().getSkillsList().contains( skill_id ) )
// old_skill = player.getActiveClass().getSkillsList().get( skill_id );
int new_level = player.getSkillLevel( skill_id ) == -1 ? 1 : player.getSkillLevel( skill_id ) + 1;

L2Skill skill = SkillTable.getInstance().getInfo( skill_id, new_level );
if( skill == null )
{
System.out.println( "Skilltable cannot find skill " + String.valueOf(skill_id) );
return;
}
player.addSkill( skill, true ); // store in DB
// скилл надо добавлять мейну а не субу.
//player.getActiveClass().setSkills( player.getActiveClass().getSkills() +
// (player.getActiveClass().getSkills().isEmpty() ? "" : ";") + skill_id );
player.sendPacket( new SystemMessage( SystemMessage.YOU_HAVE_EARNED_S1 ).addSkillName( skill_id, new_level ) );
player.sendPacket( new SkillList( player ) );
player.sendPacket( new UserInfo( player ) );

HashMap<String, Object> variables = new HashMap<String, Object>();
variables.put( "self", player ); // Lexx modiied
callScripts( "services.SubSkills", "showList", new Object[0], variables ); // Lexx modified
}

/**
* Удаляет суб скиллы (отменяет сертификацию). Нужно доработать! Стереть правильную переменную,
* чтобы можно было снова сертифицироваться.
* Пипец, да этот метод похоже просто начисто стирает ВСЕ скиллы, а не только сабовые ))) Ещё и 10 лямов адены забирает.
*/
public void deleteSkills()
{
L2Player player = (L2Player) self;
if( player.isSubClassActive() )
{
player.sendActionFailed();
return;
}
int count = 0;
for( int[] tmp : SkillTable.SubclassSkills.skills_certificates_leve ls )
{
if(player.getSkillLevel(tmp[0])>0)
{
count++;
}
}
if( count == 0 )
{
player.sendActionFailed();
player.sendMessage( "You have no sub skills to remove." );
return;
}
if( player.getInventory().getAdena() < 10000000 )
{
player.sendActionFailed();
player.sendPacket( new SystemMessage( SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA ) );
return;
}
player.getInventory().reduceAdena( 10000000 );
L2Player cha = (L2Player)self;
for( L2SubClass subClass : cha.getSubClasses().values() )
{
if(!subClass.isBase())
{
int sub_id=subClass.getNumSub();
for( int i=65; i<=80; i += 5 )
{
String var_name = "SubSkillBook_" + String.valueOf(sub_id) + "_" + String.valueOf(i);
String booksreceived = cha.getVar( var_name );
if( booksreceived != null )
{
cha.setVar( var_name, "0" );
}
}
}
}
for( int i=10280; i<=10294; i ++ )
{
long countb = cha.getInventory().getCountOf( i);
if(countb>0)
{
cha.getInventory().destroyItemByItemId( i, countb, true);
}
L2ItemInstance item = cha.getWarehouse().findItemId(i);
if(item!=null)
{
if(item.getCount()>0)
cha.getWarehouse().destroyItem( i, item.getCount() );
}
}
long countb = cha.getInventory().getCountOf( 10612 );
if(countb>0)
cha.getInventory().destroyItemByItemId( 10612, countb, true );
L2ItemInstance item = cha.getWarehouse().findItemId(10612);
if(item!=null)
{
if(item.getCount()>0)
cha.getWarehouse().destroyItem( 10612, item.getCount() );
}
for( int[] tmp : SkillTable.SubclassSkills.skills_certificates_leve ls )
{
if(player.getSkillLevel(tmp[0])>0)
{
L2Skill skill = SkillTable.getInstance().getInfo( tmp[0], player.getSkillLevel(tmp[0]) );
player.removeSkill( skill, true );
}
}
player.sendPacket( new SkillList( player ) );
player.sendPacket( new UserInfo( player ) );
show( new CustomMessage( "scripts.services.SubclassSkills.SkillsDeleted ", player ), player );
}

public void onLoad()
{
System.out.println("Loaded Service: Subclass Skills");
}

public void onReload()
{}

public void onShutdown()
{}
}[/SPOILER][/hide]

Нужно теперь его как-то вызвать из Html диалога, ну и подправить немного под другие сборки.

Есть идеи?

ЗЫ Если уже есть шаровые сертификации для финала или подобные темы, то сори
__________________
"Знающие не говорят, говорящие не знают"
MarShallx вне форума Ответить с цитированием
Непрочитано 01.08.2009, 08:13   #2
Пользователь

По умолчанию Ответ: Вместе реализуем сертификацию в Gracia Final?

Цитата:
Сообщение от MarShallx Посмотреть сообщение
Вообщем я порылся по инету и не нашел еще ни 1 шаровой сборки финалки, где были бы хотя бы зачатки рабочей сертефикации, почти везде было так:

Что, как я понял, означает возврат к самому первому диалогу с данным НПЦ..

Ну так вот, я предлагаю сделать вместе сертефикацию, отталкияваясь от рабочей сертефикации в сборках ct2.2, потом то, что получилось можно выложить в шару под хайдом..

Вообщем от скрипт от л2дрим, отвечающий за сертефикацию в ct2.2:
*** скрытый текст ***

Нужно теперь его как-то вызвать из Html диалога, ну и подправить немного под другие сборки.

Есть идеи?

ЗЫ Если уже есть шаровые сертификации для финала или подобные темы, то сори
скоро будет)
сегодня завтра выйдет в шару РТ грация финал(нова версия) и там уже реализована сертификация
__________________
http://lineage-verona.ru
AlexZr вне форума Отправить сообщение для AlexZr с помощью ICQ Ответить с цитированием
Непрочитано 01.08.2009, 08:51   #3
Пользователь

Автор темы (Топик Стартер) Ответ: Вместе реализуем сертификацию в Gracia Final?

А можешь выложить диалоги нпц и нужные скрипты сюда плз.. уже щас хотелось бы посмотреть сертификацию

ЗЫ Вашу сборку я итак жду)
__________________
"Знающие не говорят, говорящие не знают"
MarShallx вне форума Ответить с цитированием
Непрочитано 01.08.2009, 08:57   #4
Пользователь

По умолчанию Ответ: Вместе реализуем сертификацию в Gracia Final?

Цитата:
Сообщение от MarShallx Посмотреть сообщение
А можешь выложить диалоги нпц и нужные скрипты сюда плз.. уже щас хотелось бы посмотреть сертификацию

ЗЫ Вашу сборку я итак жду)
а толку? без поддержки ядра она не работает)
__________________
http://lineage-verona.ru
AlexZr вне форума Отправить сообщение для AlexZr с помощью ICQ Ответить с цитированием
Сказали спасибо:
Ответ


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

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

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

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


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

Вверх