[Guide] How to make a Fully Functional Quest

05/17/2011 06:34 Eurion#1
Today, we are going to make a quest that does the following:

1. A player talks to a npc and the npc will send them to a map to kill a monster.
2. The map will only allow one person in at a time.
3. Once the player has killed the monster, it will give them a reward.
4. Once the monster is killed, it will teleport you back to cronus.
5. It will then start a quest, so that players can only do the quest once every 12 hours.

Things we will be doing:

1. Copy the Maze-A map so we can make our own name.(Server side and Client Side).
2. Make a copy of Aderes, that we can name (Server side and Client Side).
3. Code up the actions so the quest is fully functional.
4. Code up the other main features.


cq_action part:
Code:
INSERT INTO `cq_action` VALUES
('60000000', '60000001', '60000004', '1080', '12000', 'isexit'),
('60000001', '60000002', '60000003', '1082', '12000', '43200'),
('60000002', '60000004', '', '1080', '12000', 'delete'),
('60000003', '0', '0', '126', '0', 'Sorry you have done the quest in the past 12 hours.'),
('60000004', '60000005', '0', '101', '0', 'Welcome %user_name. I can send you into the QuestMap.'),
('60000005', '60000006', '0', '102', '0', 'Ok~ill~go. 60000007'),
('60000006', '4000001', '0', '102', '0', 'No~Thanks 0'),
('60000007', '60000011', '60000008', '302', '1910', 'map_user == 1'),
('60000008', '60000009', '0', '1003', '0', '1910 281 434 0'),
('60000009', '60000010', '0', '2009', '0', '1910 24130'),
('60000010', '60000011', '0', '2006', '0', '0 0 1910 282 435 2413000 24130'),
('60000011', '0', '0', '126', '0', 'Sorry, someone is already in the map.'),
('60000015', '60000016', '60000018', '508', '0', '1 0 50'),
('60000016', '60000017', '0', '501', '729018', ''),
('60000017', '60000019', '0', '126', '0', 'You got a reward.'),
('60000018', '0', '0', '126', '0', 'You need atleast one empty spot in your inventory.'),
('60000019', '60000020', '0', '1003', '0', '1000 215 634'),
('60000020', '0', '0', '1080', '12000', 'new');
Pretty much, this sets up the entire npc text. And the teleporting to the quest map. The key parts of this are id's 60000000 - 60000002. These check if you have already done the quest in the past 12 hours. Id 60000009 deletes any stray monsters in the map. And 60000010 Spawns the monster we are using.

-------------------------------------------------------------------------
cq_npc part:
Code:
INSERT INTO `cq_npc` VALUES ('202', '0', '0', 'AQuestNpc', '29', '12030', '0', '0', '-1', '1000', '309', '405', '60000000', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '5', 'ÎÞ', '0', '0', '0', '0', '1', '0', '3', '3', '3', '3');
cq_npc makes it so we can enter the quest map.

-------------------------------------------------------------------------
cq_task part:
Code:
INSERT INTO cq_task VALUES 
('60000000', '60000000', '0', '', '', '0', '0', '999', '-100000', '100000', '999', '0', '0', '-1', '0'),
('60000007', '60000007', '0', '', '', '0', '0', '999', '-100000', '100000', '999', '0', '0', '-1', '0');
cq_task allows us to run our actions.

-------------------------------------------------------------------------
We will be using the current monster called AngryEvilBarye with the id of 24130.

cq_monstertype part:
Code:
UPDATE `cq_monstertype` SET action='60000015' WHERE id='24130';
Simply updates the current monster to run an action when its killed.

-------------------------------------------------------------------------
cq_map part:
Code:
INSERT INTO `cq_map` VALUES ('1910', 'QuestMap', 'QuestMap', '1910', '2621454', '0', '0', '0', '-1', '0', '0', '0', '300', '298', '1000', '0', '0', '0', '0', '0', '0', '0', '0');
This adds our copied map
-------------------------------------------------------------------------
Add the following to your clients /ini/npc.ini file. It will give our copy of Aderes a new name.

npc.ini
Code:
[NpcType1203]
Name=QuestNpc
SimpleObjID=714
StandByMotion=0714000100
BlazeMotion=0714000190
BlazeMotion1=0700000190
BlazeMotion2=0700000190
RestMotion=0714000101
Effect=petdepotnpc
ZoomPercent=110
Note=QuestNpc
FrontBlock=3
BackBlock=3
LeftBlock=3
RightBlock=3
-------------------------------------------------------------------------
Copy this to your clients ini/GameMap.ini file and your GameServer/ini/GameMap.ini file. This gives our copy of the map a new name.

GameMap.ini
Code:
[Map1910]
File=map/map/challenge-maze001.DMap
Alpha=255
Red=255
Green=255
Blue=255
Name=QuestMap
Snow=0
Firebug=0
Dragon=0
Dandelion=1
Music=music/1001.mp3
switch=0
daysound=null
nightsound=null
day=0x00FFFFFF
nightfall=0xFFFFAAAA
night=0xFF9999FF
-------------------------------------------------------------------------
Pretty much that is all there is to making a quest for your server. I would recommend you downloading forcers action types. You can get them from [Only registered and activated users can see links. Click Here To Register...]

I've tried to make this a new owner friendly as possible. If you have any more questions, feel free to ask.
05/17/2011 09:49 ~Sword~Stalker~.#2
now Thats what i can call a guide !! ... good job Eurion .. this section really needed that guide .
05/17/2011 16:10 Vykal#3
One of the better coders in this section and now you've finally put the effort of making a guide. Thanks a lot. It'll definitely help this section.
05/17/2011 21:46 linja12#4
Eureon/sword can help me? .. i found this in Actiondefine--->(ACTION_USER_OPEN_DIALOG = 1046, // notice client side opens a contact surface.data=idDialog.param= " task_id0 task_id1 task_id2 task_id3… “, may not have param, most 20 task_id, task_id cannot be 0, permission client side choice next TASK.When does not have param, the client side can upload only “TASK which the client side may trigger”.When has param, cq_task.client_active must be 0.) where can I search in client?

seccond question- how to set in cq_action for summon monster at same place we are? I see your post-->('45000007', '0','0','2006','0','0 0 8923 51 53 303100 3031');<--- this is a specific map

third question- how to set item drop 50-50.. example: monster drop only 1 item,but the result drop is RED stone/yellow stone.
05/19/2011 02:08 Eurion#5
Quote:
Originally Posted by linja12 View Post
Eureon/sword can help me? .. i found this in Actiondefine--->(ACTION_USER_OPEN_DIALOG = 1046, // notice client side opens a contact surface.data=idDialog.param= " task_id0 task_id1 task_id2 task_id3… “, may not have param, most 20 task_id, task_id cannot be 0, permission client side choice next TASK.When does not have param, the client side can upload only “TASK which the client side may trigger”.When has param, cq_task.client_active must be 0.) where can I search in client?
As far as I know, you can't find it in the client. By looking at the type of 1046, it looks like the data would be the money type it takes. But don't quote me on that part, I'm only guessing.

Quote:
Originally Posted by linja12 View Post
seccond question- how to set in cq_action for summon monster at same place we are? I see your post-->('45000007', '0','0','2006','0','0 0 8923 51 53 303100 3031');<--- this is a specific map
You can test with
Code:
%user_map_x 
%user_map_y
Not too sure if that will do what you want as I've never needed to spawn a monster at the players place.

Quote:
Originally Posted by linja12 View Post
third question- how to set item drop 50-50.. example: monster drop only 1 item,but the result drop is RED stone/yellow stone.
[/quote]

You can use the action type 121 for a chance. An example would be something like

Code:
1	2	3	121	0	50 100
2	0	0	801	0	dropitem 1034000
3	0	0	801	0	dropitem 1037150
That would pretty much give you a 50/50 chance of dropping a red stone or yellow stone.
05/19/2011 08:20 linja12#6
thankz give some example to set = %user_map_x / %user_map_y

2. this put in cq_action/dropitemrule?
1 2 3 121 0 50 100
2 0 0 801 0 dropitem 1034000
3 0 0 801 0 dropitem 1037150
05/19/2011 23:54 Eurion#7
Quote:
Originally Posted by linja12 View Post
thankz give some example to set = %user_map_x / %user_map_y
Using your example it would be something like.

Code:
('45000007', '0','0','2006','0','0 0 %user_map_id %user_map_x %user_map_y 303100 3031');
Quote:
Originally Posted by linja12 View Post
2. this put in cq_action/dropitemrule?
1 2 3 121 0 50 100
2 0 0 801 0 dropitem 1034000
3 0 0 801 0 dropitem 1037150
Those will go into your cq_action
05/20/2011 10:17 linja12#8
1. you forgot to tell me ..put action at monster same = cq_action. anyway thanks.
2. I see 2006 is event monster,its cant move/attack. wat ID to set Real monster & how to set its param?
05/20/2011 17:56 Eurion#9
The action type 2006, spawns a monster. It can be any monster that you have in your cq_monstertype table. All you have to do is follow the examples I gave you.

Quote:
1. you forgot to tell me ..put action at monster same = cq_action. anyway thanks.
I've given you the basics. It's up to you to read, test, and try doing different things. You can use this simple guide to do many things using the quest system.
05/20/2011 21:46 linja12#10
Eurion can answer my last question please [Only registered and activated users can see links. Click Here To Register...]
07/20/2011 08:21 DuaSelipar#11
sorry for asking..
('60000020', '0', '0', '1003', '0', 'new');
whats that line function?
i still can get in after i done that quest...
08/31/2011 22:19 shadowkiller990#12
('45000007', '0','0','2006','0','0 0 %user_map_id %user_map_x %user_map_y 303100 3031');

what is the 303100 used for is that generator? and if so i wanna try and spawn a monster from cq_monstertype if thats possible instead of Generator
09/01/2011 07:50 pretzel666#13
Best explained guide ive ever seen Kick ass job ;D
09/03/2011 17:59 shadowkiller990#14
is there a way when a player uses the teleporter to exit it will remove any and all monsters on that map?
09/03/2011 18:08 Eurion#15
Quote:
Originally Posted by shadowkiller990 View Post
('45000007', '0','0','2006','0','0 0 %user_map_id %user_map_x %user_map_y 303100 3031');

what is the 303100 used for is that generator? and if so i wanna try and spawn a monster from cq_monstertype if thats possible instead of Generator
The 303100 is the cq_monstertype's monster id, plus 00.

------------------------------

Quote:
Originally Posted by shadowkiller990 View Post
is there a way when a player uses the teleporter to exit it will remove any and all monsters on that map?
Sure you can, you just need to know the id's of the monsters.

Action type is 2009

An example would be

Code:
3016349	3016374	3016374	[color=red]2009[/color]	0	[color=blue]8703[/color] [color=lime]10061[/color]
The 2009 is the action type to remove monsters.
The 8703 is the map id
The 10061 is the monster id


This will remove every monster in that map with the id of 10061.