Jump to content

Recommended Posts

Posted (edited)

Hello everyone,

I saw that many are searching for a "instant" Class/Subclass/Noblesse npc. I would like to share my npc script.

NPCDATA : 

npc_begin	citizen	25540	[class_manager]	level=70	acquire_exp_rate=0	acquire_sp=0	unsowing=1	clan={}	ignore_clan_list={}	clan_help_range=300	slot_chest=[]	slot_rhand=[]	slot_lhand=[]	shield_defense_rate=0	shield_defense=0	skill_list={@s_npc_prop_race_humanoid;@s_full_magic_defence}	npc_ai={[class_changers];{[fnHi]=[lin2world_manager001.htm]};{[MoveAroundSocial]=0};{[MoveAroundSocial1]=0};{[MoveAroundSocial2]=0}}	category={}	race=human	sex=male	undying=1	can_be_attacked=0	corpse_time=7	no_sleep_mode=0	agro_range=1000	ground_high={120;0;0}	ground_low={80;0;0}	exp=429634528	org_hp=2444.46819	org_hp_regen=7.5	org_mp=1345.8	org_mp_regen=2.7	collision_radius={5;5}	collision_height={25;25}	str=40	int=21	dex=30	wit=20	con=43	men=10	base_attack_type=sword	base_attack_range=40	base_damage_range={0;0;80;120}	base_rand_dam=30	base_physical_attack=100000	base_critical=4	physical_hit_modify=4.75	base_attack_speed=253	base_reuse_delay=0	base_magic_attack=470.40463	base_defend=295.91597	base_magic_defend=216.53847	physical_avoid_modify=0	soulshot_count=0	spiritshot_count=0	hit_time_factor=0.72	item_make_list={}	corpse_make_list={}	additional_make_list={}	additional_make_multi_list={}	hp_increase=0	mp_increase=0	safe_height=100	npc_end

NPCPCH : 
 

[class_manager] = 1025540

AI ( decompiled ). You must compile the NASC and copy the ai in ai.obj.
item_name must be edited by you, you can create a new item (example: donation_coin).
Editing item_name,you should edit and the HTM : lin2world_manager001
You'll can edit easily the adena amount.

 

class 1 class_manager : citizen
{
parameter:
	string	fnHi = "lin2world_manager001.htm";
	string	getoccupation = "lin2world_manager003.htm";
	string	class_error = "lin2world_manager004.htm";
	string	human_fighter = "lin2world_manager002a.htm";
	string	human_mage = "lin2world_manager002b.htm";
	string	elven_fighter = "lin2world_manager002c.htm";
	string	elven_mage = "lin2world_manager002d.htm";
	string	darkelf_fighter = "lin2world_manager002e.htm";
	string	darkelf_mage = "lin2world_manager002f.htm";
	string	orc_fighter = "lin2world_manager002g.htm";
	string	dwarf_fighter = "lin2world_manager002h.htm";
	string	human_fighter_02a = "lin2world_manager002aa.htm";
	string	human_fighter_02b = "lin2world_manager002ab.htm";
	string	human_fighter_02c = "lin2world_manager002ac.htm";
	string	human_mage_02a = "lin2world_manager002ba.htm";
	string	human_mage_02b = "lin2world_manager002bb.htm";
	string	elven_fighter_02a = "lin2world_manager002ca.htm";
	string	elven_fighter_02b = "lin2world_manager002cb.htm";
	string	elven_mage_02a = "lin2world_manager002da.htm";
	string	darkelf_fighter_02a = "lin2world_manager002ea.htm";
	string	darkelf_fighter_02b = "lin2world_manager002eb.htm";
	string	darkelf_mage_02a = "lin2world_manager002fa.htm";
	string	orc_mage = "lin2world_manager002ga.htm";
	string	ShopName = "";
	string	fnSell = "msell.htm";
	string	fnUnableItemSell = "muib.htm";
	int	ItemOccup = 57;
	int	Amount = 10000000;
property:
	BuySellList BuyList0 = {};
	
handler:

	EventHandler TALKED(talker)
	{
		myself::ShowPage(talker, fnHi);
	}
	
	
	EventHandler MENU_SELECTED(talker, ask, reply)
	{
		if ( ((ask == -900) && (reply == 1)) )
		{
			if ( talker.level >= 20 && myself::OwnItemCount(talker, @adena ) >= 100000)
			{
				if ( talker.occupation == 0 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, human_fighter);
				}
				if ( talker.occupation == 10 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, human_mage);
				}
				if ( talker.occupation == 18 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, elven_fighter);
				}
				if ( talker.occupation == 25 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, elven_mage);
				}
				if ( talker.occupation == 31 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, darkelf_fighter);
				}
				if ( talker.occupation == 38 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, darkelf_mage);
				}
				if ( talker.occupation == 44 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, orc_fighter);
				}
				if ( talker.occupation == 49 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ClassChange(talker, 50);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 53 )
				{
				    myself::DeleteItem1(talker, @adena, 100000);
					myself::ShowPage(talker, dwarf_fighter);
				}
			}
			else 
			{
				myself::ShowPage(talker, class_error);
			}
		}
		if ( ((ask == -900) && (reply == 2)) )
		{
			if ( talker.level >= 40 && myself::OwnItemCount(talker, @adena ) >= 1000000)
			{
				if ( talker.occupation == 1 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, human_fighter_02a);
				}
				if ( talker.occupation == 4 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, human_fighter_02b);
				}
				if ( talker.occupation == 7 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, human_fighter_02c);
				}
				if ( talker.occupation == 11 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, human_mage_02a);
				}
				if ( talker.occupation == 15 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, human_mage_02b);
				}
				if ( talker.occupation == 19 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, elven_fighter_02a);
				}
				if ( talker.occupation == 22 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, elven_fighter_02b);
				}
				if ( talker.occupation == 26 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, elven_mage_02a);
				}
				if ( talker.occupation == 29 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 30);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 32 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, darkelf_fighter_02a);
				}
				if ( talker.occupation == 35 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, darkelf_fighter_02b);
				}
				if ( talker.occupation == 39 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, darkelf_mage_02a);
				}
				if ( talker.occupation == 42 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 43);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 45 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 46);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 47 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 48);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 50 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ShowPage(talker, orc_mage);
				}
				if ( talker.occupation == 54 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 55);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 56 )
				{
				    myself::DeleteItem1(talker, @adena, 1000000);
					myself::ClassChange(talker, 57);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
			}
			else 
			{
				myself::ShowPage(talker, class_error);
			}
		}
		if ( ((ask == -900) && (reply == 3)) )
		{
			if ( ((myself::OwnItemCount(talker, ItemOccup) >= Amount) && (talker.level >= 76)) )
			{
				if ( talker.occupation == 2 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 88);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 3 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 89);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 5 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 90);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 6 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 91);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 8 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 93);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 9 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 92);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 12 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 94);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 13 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 95);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 14 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 96);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 16 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 97);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 17 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 98);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 20 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 99);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 21 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 100);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 23 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 101);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 24 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 102);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 27 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 103);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 28 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 104);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 30 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 105);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 33 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 106);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 34 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 107);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 36 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 108);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 37 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 109);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 40 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 110);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 41 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 111);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 43 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 112);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 46 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 113);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 48 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 114);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 51 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 115);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 52 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 116);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 55 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 117);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
				if ( talker.occupation == 57 )
				{
					myself::DeleteItem1(talker, ItemOccup, Amount);
					myself::ClassChange(talker, 118);
					myself::ShowSystemMessage(talker, 1308);
					myself::ShowPage(talker, getoccupation);
				}
			}
			else 
			{
				myself::ShowPage(talker, class_error);
			}
		}
		if ( ask == -91 )
		{
			if ( talker.level >= 20 )
			{
				if ( talker.occupation == 0 )
				{
					if ( reply == 1 )
					{
						myself::ClassChange(talker, 1);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 2 )
					{
						myself::ClassChange(talker, 4);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 3 )
					{
						myself::ClassChange(talker, 7);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 10 )
				{
					if ( reply == 4 )
					{
						myself::ClassChange(talker, 11);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 5 )
					{
						myself::ClassChange(talker, 15);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 18 )
				{
					if ( reply == 6 )
					{
						myself::ClassChange(talker, 19);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 7 )
					{
						myself::ClassChange(talker, 22);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 25 )
				{
					if ( reply == 8 )
					{
						myself::ClassChange(talker, 26);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 9 )
					{
						myself::ClassChange(talker, 29);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 31 )
				{
					if ( reply == 10 )
					{
						myself::ClassChange(talker, 32);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 11 )
					{
						myself::ClassChange(talker, 35);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 38 )
				{
					if ( reply == 12 )
					{
						myself::ClassChange(talker, 39);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 13 )
					{
						myself::ClassChange(talker, 42);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 44 )
				{
					if ( reply == 14 )
					{
						myself::ClassChange(talker, 45);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 15 )
					{
						myself::ClassChange(talker, 47);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 53 )
				{
					if ( reply == 16 )
					{
						myself::ClassChange(talker, 54);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 17 )
					{
						myself::ClassChange(talker, 56);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
			}
		}
		if ( ask == -92 )
		{
			if ( talker.level >= 40 )
			{
				if ( talker.occupation == 1 )
				{
					if ( reply == 1 )
					{
						myself::ClassChange(talker, 2);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 2 )
					{
						myself::ClassChange(talker, 3);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 4 )
				{
					if ( reply == 3 )
					{
						myself::ClassChange(talker, 5);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 4 )
					{
						myself::ClassChange(talker, 6);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 7 )
				{
					if ( reply == 5 )
					{
						myself::ClassChange(talker, 8);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 6 )
					{
						myself::ClassChange(talker, 9);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 11 )
				{
					if ( reply == 7 )
					{
						myself::ClassChange(talker, 12);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 8 )
					{
						myself::ClassChange(talker, 13);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 9 )
					{
						myself::ClassChange(talker, 14);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 15 )
				{
					if ( reply == 10 )
					{
						myself::ClassChange(talker, 16);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 11 )
					{
						myself::ClassChange(talker, 17);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 19 )
				{
					if ( reply == 12 )
					{
						myself::ClassChange(talker, 20);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 13 )
					{
						myself::ClassChange(talker, 21);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 22 )
				{
					if ( reply == 14 )
					{
						myself::ClassChange(talker, 23);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 15 )
					{
						myself::ClassChange(talker, 24);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 26 )
				{
					if ( reply == 16 )
					{
						myself::ClassChange(talker, 27);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 17 )
					{
						myself::ClassChange(talker, 28);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 32 )
				{
					if ( reply == 18 )
					{
						myself::ClassChange(talker, 33);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 19 )
					{
						myself::ClassChange(talker, 34);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 35 )
				{
					if ( reply == 20 )
					{
						myself::ClassChange(talker, 36);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 21 )
					{
						myself::ClassChange(talker, 37);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 39 )
				{
					if ( reply == 22 )
					{
						myself::ClassChange(talker, 40);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 23 )
					{
						myself::ClassChange(talker, 41);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
				if ( talker.occupation == 50 )
				{
					if ( reply == 24 )
					{
						myself::ClassChange(talker, 51);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
					if ( reply == 25 )
					{
						myself::ClassChange(talker, 52);
						myself::ShowSystemMessage(talker, 1308);
						myself::ShowPage(talker, getoccupation);
					}
				}
			}
		}
		if(ask == -900 && reply == 4 )
    {
    if(talker.level >= 75 && talker.subjob_id != 0 && myself::OwnItemCount(talker, @item_name ) >= 100)
      {
      myself::DeleteItem1(talker, @item_name, 100);
      myself::GiveItem1(talker, @nobless_tiara ,1);
      myself::SetNobless(talker);
      myself::ShowPage(talker,"noble_success.htm");
      myself::SoundEffect(talker,"ItemSound.quest_finish");
      }
    else
      {
      myself::ShowPage(talker,"noble_cannot.htm");
      }
    }
    if(ask == -900 && reply == 5)
      {
    if(talker.level >= 75 && talker.subjob_id != 0 && myself::OwnItemCount(talker, @adena ) >= 50000000)
        {
		      myself::DeleteItem1(talker, @adena, 50000000);
        myself::GiveItem1(talker, @mimirs_elixir, 1);
	myself::GiveItem1( talker, @scrl_of_ench_wp_a, 1 );
	myself::SetOneTimeQuestFlag( talker, 235, 1 );
	myself::SoundEffect( talker, "ItemSound.quest_finish" );
	myself::ShowPage(talker,"subclass_finish.htm");
	}
      else
        {
	myself::ShowPage(talker,"subclass_no.htm");
	}
  }
 }
}
  

Here are the HTMs : 
http://www.4shared.com/archive/51_MtMKtba/html.html?

I'll try to bring more shares like this because I see that L2OFF section is death.Hope I was helpful, have fun playing with it.

Edited by markwil
  • Upvote 1
Posted

Thank you guys, I'll come with more !

Good that some one thinks to keep l2off share section alive. :)

Posted

Nice share, if you could get some pointers on that code:

 

1) It doesnt take into account Kamael classes (123 - 136). Its not that hard to add them tho.

2) Do a check on Noblesse status on your "nobless" AI part, so users that are already noblesse dont "purchase" it again (and lose items on the process).

3) You can also check "onetimequest" flag on quests 235 (and 236 for kamaels),  so users that already have subclass dont "purchase" it again (and lose items on the process).

 

Well done :D.

 

O2D

  • 1 year later...
Posted (edited)

Have a error = 

 

This is correct =

if(ask == -900 && reply == 5 )
    {
    if(talker.level >= 75 && talker.subjob_id != 0 && myself::OwnItemCount(talker, @item_name ) >= 100)
      {
      myself::DeleteItem1(talker, @item_name, 100);
      myself::GiveItem1(talker, @nobless_tiara ,1);
      myself::SetNobless(talker);
      myself::ShowPage(talker,"noble_success.htm");
      myself::SoundEffect(talker,"ItemSound.quest_finish");
      }
    else
      {
      myself::ShowPage(talker,"noble_cannot.htm");
      }
    }
    if(ask == -900 && reply == 4)
      {
    if(talker.level >= 75 && talker.subjob_id == 0 && myself::OwnItemCount(talker, @adena ) >= 50000000)
        {
		      myself::DeleteItem1(talker, @adena, 50000000);
        myself::GiveItem1(talker, @mimirs_elixir, 1);
	myself::GiveItem1( talker, @scrl_of_ench_wp_a, 1 );
	myself::SetOneTimeQuestFlag( talker, 235, 1 );
	myself::SoundEffect( talker, "ItemSound.quest_finish" );
	myself::ShowPage(talker,"subclass_finish.htm");
	}
      else
        {
	myself::ShowPage(talker,"subclass_no.htm");
	}
Edited by utko
Guest
This topic is now closed to further replies.
  • Posts

    • The bot video lasts 35 minutes and not everything is shown there, if everything was shown, the video could have lasted several hours. Also, the video quality is reduced so as not to take up much space.The last minutes of the video show bots attacking each other on the event. https://dropmefiles.com/1jMi2
    • We also forgot to say that the deal will be the way you want it, we are ready for almost any of your demands. And we ask the administration to review our post as soon as possible, because several hours have passed and it still hasn't passed moderation, thank you in advance!  
    • 💥Super offer GitHub Account  (5 years)💥 ⚠️ Available to order for only $20🔥
    • Good day to all! We present to your attention our source code h5, where several projects used and achieved very good results, both in terms of online and in general for the project. (Due to confidentiality, the list of projects, the test server and what the basis of the source code will be provided only to real buyers, where they can go and check them out)   The main feature is bots, which are very animated, one to one like real players. But, in addition to bots, the build has a lot of interesting and modern things. Below will be a video showing bots and a little about the server.   As we said, the build was used on several projects, so the first thing that is there is not a single backdoor on the server, all serious and critical errors have been fixed. Races and classes are closer to the official PTS platform.   And also the server can be used as a classic server, as well as a server with add-ons, because the server has added many new things, weapons, armor, jewelry, hats, cloaks, etc.   The server has a full working community board (alt+b), working locations, quests, geodata, mechanism, working ai, in general there are no problems and complaints. In alt+b, shops, various services, buffer, player statistics, clan statistics, mail, profession change, personal account, registration for events, etc. are available.   Additional services: Premium account, visual costumes, nickname change services (for yourself and your pet), nickname and title painting service, karma/PC cleaning, expand services, weapon/armor/jewelry sharpening service, level up and down service, nobles purchase service, beauty salon (new hairstyle change from higher chronicles and face change), additional window purchase service, clan reputation purchase service, weapon augmentation purchase service.   Internal services: auto potions (acp), referral system, repair services, automatic reward delivery after n. time, additional auction, and other working systems, also many available commands, such as: exact date of epic respawn, password change directly inside the game, offline buffer, auto att, registration for castle sieges directly by entering a command and other available commands.   The server has protection (both on the server side and on the client side) that protects against free software and also several other anti-bot systems that will not give the slightest chance to bot users. But if you want people to use software, you just turn it off.   Bots. As we said, one of the main features of our server is bots, they are one to one like real players, now a little about bots and below is a link to a video about how they work: Server bots are like real players, their AI is copied from the AI ??of real characters, and therefore they get what real players get and you can also do with them everything that can be done with real characters.   They write in chats, in all chats, trade, shout, pm, clan chat, general chat. They walk around the cities, level up, farm, kill each other in pvp and pc, put on weapons, armor, jewelry, sharpen weapons. According to their level, they will choose their professions, join clans, participate in different events, use alt+b services - I'm telling you, their AI is copied and adapted like a real player's AI, so they can do everything that a real player can.   Bot control: You can set a chat and words for bots, how often or rarely they will write in chats, you can control where and how the bots will level up, you can control what events they will be at, you can control what cities they will run in, you can control where they will stand, you can even call them to you and that's not all, they are completely in your hands and you can twist them as you want. The bot video lasts 35 minutes and not everything is shown there, if everything was shown, the video could have lasted several hours. Also, the video quality is reduced so as not to take up much space.   You can check the rest yourself on the test server and we will fully show you everything that bots are capable of and you will be surprised)   Now about the price and a little about our work and what is included in this price. We do not sell only the build, we sell the source code in its entirety, so that you can adapt something for yourself. The price of the source code: 15,000 euros. What is included in this price: 1. We do not have a license, you buy it once and you can use it for the rest of your life. 2. There is no online limit and there is also no limit on running bots, the server can support as much online and bots as your VDS is powerful. 3. Client-side protection. You will not pay extra for protection, the source code already has everything. 4. All builds that we have created for projects that bought the source from us (they have ready-made servers, with their own ready-made concepts, configs, different alt+b designs, for different rates x1, x10, x20, x50, x100, x1200, x5000, there are also servers for classics and servers with add-ons, they all have configured bots for their servers) all this will be included in this price. You will receive all the builds of these projects. 5. Once a year we update and improve the source, we will also improve the bots, make different paths for them, different farming places, and revive them more and more, to get them you will have to pay 20 euros to get the updates. 6. You will receive all the bot settings from our first projects to the last, the video shows little, our last configured bots are almost indistinguishable from real players and you will see this yourself on the test server or later. (Our last setup and development of bots lasted 11 months and these works and what bots can do cannot be described in words, you yourself must see them to feel this work and power) 7. We will teach you how to control both the server and training on setting up and controlling bots. 8. We will provide you with VDS for 3 months and if necessary we will help you as much as we can until the first launch of your project! 9. Our bots move, they don't stand in one place, they walk around the cities and use a teleport, after the teleport they move on to the farming place in random places. They communicate in the chat and if you hit them, they can hit you back. They are in almost every city and farming location, near many key NPCs, instance zone managers, etc. They are automatically updated and move around the cities and farming zones. They attack those who have a flag and those who is pk. These are simply unique bots that can help you in terms of your online and your project in general! 10. As we said, our latest bot development lasted 11 months and we made 92 new farm zones for bots, more than 150,000 new paths for all locations, different methods of dressing their equipment, different methods of their behavior and more than 40,000 universal words in the chat, in different languages, where no one can even doubt that these are bots! Our contact information Telegramm: https://t.me/jg_uc Discord: j.g.u.c_dev
  • Topics

×
×
  • Create New...