Initial release of lasagna npcs (#2105)
* First release of lasagna npcs (playing conversion). * Added a new parameter for npctalk script command Target for <flag>: - bc_all : Broadcast message is sent server-wide (only in the chat window). - bc_map : Message is sent to everyone in the same map as the source of the npc. - bc_area : Message is sent to players in the vicinity of the source (default value). - bc_self : Message is sent only to player attached. * Implemented doram food buffs * Updated npctalk: *npctalk "<message>"{,"<NPC name>",<flag>}; - Empty string for "<NPC name>" now means attached NPC * Added flag parameter for unittalk script command *unittalk <GID>,"<text>"{,<flag>}; flag: Specify target bc_area - Message is sent to players in the vicinity of the source (default). bc_self - Message is sent only to player attached. * Updated classchange script command: classchange(<view id>{,"<NPC name>",<flag>}); flag: Specify target bc_area - Data is sent to players in the vicinity of the source (default). bc_self - Data is sent only to player attached. * Updated Time Limit for quests to allow HH:MM format Thanks @secretdataz, @Lemongrass3110, @aleos89, @Jeybla, @anacondaqq, @jenkijo, @sikiro, @admkakaroto for contributing !
This commit is contained in:
parent
809fc35b0e
commit
a5afb06979
@ -6118,6 +6118,7 @@
|
||||
11599,Superstar_Potion,Superstar Potion,0,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
11600,Shining_Holy_Water,Shining Holy Water,0,10,,15,,,,0,0xFFFFFFFF,63,2,,,,,,{ if(strcharinfo(3)=="prt_q") { bonus_script "{ bonus2 bSubSize,Size_All,10; }",600; sc_end SC_SILENCE; sc_end SC_POISON; sc_end SC_CURSE; heal 1000,0; } },{},{}
|
||||
11602,Catnip_Fruit,Catnip Fruit,0,15,,1,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(10,40),0; },{},{}
|
||||
11601,Delicious_Anchovy,Delicious Anchovy,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(30,46),0; },{},{}
|
||||
11605,Cookie_Bat,Cookie Bat,0,0,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(50,100),0; /*TODO*/ },{},{}
|
||||
//
|
||||
11701,Girl_Bunch_Of_Flower_,Girl's Bouquet,0,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(105,145),0; },{},{}
|
||||
@ -9841,6 +9842,7 @@
|
||||
19053,Fighter_Moon_Cat,Fighter Moon Cat,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ /*Enables use of Level 1 Monster's Cry*/ .@r = getrefine(); bonus bAllStats,3; bonus2 bAddEff,Eff_Stun,500+(.@r*100); },{},{}
|
||||
19082,Bio_Protector,Bio Protector,4,0,,500,,3,,0,0xFFFFFFFF,63,2,512,1,50,1,1366,{ bonus bHit,10; bonus bVariableCastrate,-5; bonus bPerfectHitRate,5; },{},{}
|
||||
19083,Mask_of_Hero,Mask of Hero,4,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,70,0,1367,{ bonus bVit,10; bonus bMdef,10; bonus bShortWeaponDamageReturn,1; },{},{}
|
||||
19084,Parfaille_Vigilante_Hat,Parfaille Vigilante Hat,4,0,,100,,2,,0,0x80000000,63,2,256,,20,1,1368,{ bonus bLuk,1; bonus3 bAutoSpell,"AL_BLESSING",3,100; },{},{}
|
||||
19085,Sigrun's_Wings_,Sigrun's Wings,4,20,,100,,2,,1,0xFFFFFFFF,63,2,512,,1,0,568,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) { bonus bAspd,1; bonus bAgi,-2; } else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||Class==Job_Ninja||Class==Job_Soul_Linker){ bonus bMatk,3; bonus bHealPower,2; } else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bLongAtkRate,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,60; bonus bMaxSP,30; } },{},{}
|
||||
19086,Robo_Eye_,Robo Eye,4,20,,200,,2,,1,0xFFFFFFFF,63,2,512,,10,0,345,{ bonus2 bAddClass,Class_All,1; bonus bMatkRate,1; bonus bDex,1; },{},{}
|
||||
19087,Angel_Spirit_,Angel Spirit,4,20,,200,,0,,1,0xFFFFFFFF,63,2,512,,0,0,394,{ bonus bStr,1; bonus bHit,8; },{},{}
|
||||
@ -11092,7 +11094,8 @@
|
||||
22899,Parchment_City,Parchment City,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AL_INCAGI",1; heal -15,0; },{},{}
|
||||
22901,Question_Old_Blue_Box,Question Old Blue Box,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /*No info yet*/ },{},{}
|
||||
22902,Sealed_Card_Album_Scroll_II,Sealed Card Album Scroll II,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem callfunc("F_Rand",6238,6239,17474,22829,24243,24244,24245),1; },{},{}
|
||||
22985,Basil,Basil,0,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "{ bonus2 bSPRegenRate,5,10000; }",180,1,0,SI_DORAM_BUF_02; },{},{}
|
||||
22984,Kahluna_Milk,Kahluna Milk,0,6,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_DORAM_BUF_01, 180000, 0; },{},{}
|
||||
22985,Basil,Basil,0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_DORAM_BUF_02, 180000, 0; },{},{}
|
||||
//
|
||||
23177,Kafra_Card_,Kafra Card,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashStore"; },{},{}
|
||||
23191,Varetyr_Spear_Scroll_1_5,Level 5 Varetyr Spear,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "SO_VARETYR_SPEAR",5; },{},{}
|
||||
@ -11363,6 +11366,13 @@
|
||||
//===================================================================
|
||||
// New etc.
|
||||
//===================================================================
|
||||
25043,Thorny_Vine_Flute,Thorny Vine Flute,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25044,Hard_Thorny_Vine,Hard Thorny Vine,3,0,,10,,,,,,,,,,,,,{},{},{}
|
||||
25045,Luxurious_Cloth,Luxurious Cloth,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25046,Boarding_Pass,Boarding Pass,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25047,Kahlunac,Kahlunac,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25048,Hearty_Lunchbox,Hearty Lunchbox,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25049,Basilac_Clam,Basilac Clam,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25132,Pumpkin_Deco,Pumpkin Deco,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25133,Dried_White_Stem,Dried White Stem,3,0,,0,,,,,,,,,,,,,{},{},{}
|
||||
25142,Doram_Token,Doram Token,3,,0,0,,,,,,,,,,,,,{},{},{}
|
||||
|
@ -3671,6 +3671,7 @@
|
||||
19051,475,100 // Warrior_Moon_Cat
|
||||
19052,507,100 // Sigruns_Wing
|
||||
19053,475,100 // Fighter_Moon_Cat
|
||||
19084,467,100 // Parfaille_Vigilante_Hat
|
||||
19523,475,100 // Donation_Ribbon
|
||||
19531,475,100 // C_Cube_Mask
|
||||
19532,475,100 // C_Red_Bunny_Band
|
||||
@ -3860,6 +3861,12 @@
|
||||
//22952,475,100 //
|
||||
23177,475,100 // Kafra_Card_
|
||||
23196,475,100 // Shining_Blue_Lucky_Egg
|
||||
25043,499,100 // Thorny_Vine_Flute
|
||||
25045,499,100 // Luxurious_Cloth
|
||||
25046,499,100 // Boarding_Pass
|
||||
25047,499,100 // Kahlunac
|
||||
25048,499,100 // Hearty_Lunchbox
|
||||
25049,499,100 // Basilac_Clam
|
||||
25132,499,100 // Pumpkin_Deco
|
||||
25133,499,100 // Dried_White_Stem
|
||||
25143,499,100 // Gift_Stuffed_Doll
|
||||
|
@ -2649,20 +2649,23 @@
|
||||
//3492,E_WILD_MOBSTER
|
||||
//3493,SYS_MSG_J
|
||||
//3494,IFN_POIRING
|
||||
//3495,DR_EGGRING
|
||||
//3496,DR_LUNATIC
|
||||
//3497,DR_FABRE
|
||||
//3498,DR_HORNET
|
||||
//3499,DR_RODA_FROG
|
||||
//3500,DR_DESERT_WOLF_B
|
||||
//3501,DR_SPORE
|
||||
//3502,DR_BASILISK1
|
||||
//3503,DR_BASILISK2
|
||||
//3504,DR_BASILISK3
|
||||
//3505,DR_BIG_EGGRING
|
||||
//3506,DR_MANDRAGORA
|
||||
//3507,DR_POM_SPIDER
|
||||
//3508,DR_EGGRING_G
|
||||
|
||||
// Dummy (inaccurate)
|
||||
3495,DR_EGGRING,Eggring,Eggring,1,50,1,50,35,1,8,9,2,4,6,1,1,0,6,5,10,12,1,3,22,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,909,8750,938,3750,601,1250,0,0,0,0,4659,1
|
||||
3496,DR_LUNATIC,Leaf Lunatic,Leaf Lunatic,3,44,1,50,35,1,11,12,16,0,10,3,3,0,8,5,10,12,0,2,60,0x81,200,1456,456,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,2000,949,6000,705,8000,0,0,0,0,4663,1
|
||||
3497,DR_FABRE,Grass Fabre,Grass Fabre,7,60,1,52,38,1,12,15,24,0,12,5,5,5,12,5,10,12,0,4,22,0x2000081,400,1672,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,914,7500,511,2500,0,0,0,0,4664,1
|
||||
3498,DR_HORNET,Wild Hornet,Wild Hornet,11,78,1,57,42,1,13,16,7,1,12,24,4,5,6,5,10,12,0,4,24,0x2001081,150,1292,792,216,0,0,0,0,0,0,0,0,0,939,10000,909,10000,601,444,0,0,0,0,0,0,0,0,0,0,4665,1
|
||||
3499,DR_RODA_FROG,Sweet Roda Frog,Sweet Roda Frog,14,140,1,65,50,1,19,23,12,5,12,6,4,0,14,9,10,12,1,5,21,0x81,200,2016,816,288,0,0,0,0,0,0,0,918,10000,908,571,511,571,601,571,1684,416,1683,416,0,0,0,0,0,0,4666,1
|
||||
3500,DR_DESERT_WOLF_B,Hunter Desert Wolf,Hunter Desert Wolf,17,113,1,76,58,1,80,91,15,3,27,24,30,15,33,5,10,12,1,2,23,0x1089,200,1054,504,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,919,2000,582,2000,0,0,0,0,4667,1
|
||||
3501,DR_SPORE,Trans Spore,Trans Spore,18,280,1,74,59,1,25,33,12,10,15,5,10,0,12,0,10,12,1,3,21,0x81,200,1872,672,288,0,0,0,0,0,0,0,921,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4668,1
|
||||
3502,DR_BASILISK1,Scout Basilisk,Scout Basilisk,20,243,1,95,62,1,38,50,18,10,0,8,17,0,15,0,10,12,1,2,22,0x3885,400,2612,912,288,0,0,0,0,0,0,0,1685,217,1686,217,22985,256,0,0,0,0,0,0,0,0,0,0,0,0,4660,1
|
||||
3503,DR_BASILISK2,Combat Basilisk,Combat Basilisk,140,180030,1,583,656,1,216,245,105,80,56,12,19,11,27,10,10,12,1,2,42,0x3885,250,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4661,1
|
||||
3504,DR_BASILISK3,Combat Basilisk,Combat Basilisk,148,216036,1,583,656,1,216,245,126,80,56,12,19,11,27,10,10,12,1,2,42,0x3885,250,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4661,1
|
||||
3505,DR_BIG_EGGRING,Big Eggring,Big Eggring,25,156,1,97,73,4,20,23,13,2,12,3,5,5,10,5,10,12,1,3,62,0x84,1000,1768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4662,1
|
||||
3506,DR_MANDRAGORA,Jungle Madragora,Jungle Madragora,144,190570,1,0,0,1,80,120,113,62,35,21,41,12,29,60,10,12,1,3,62,0x6203695,300,1072,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4669,1
|
||||
3507,DR_POM_SPIDER,Fruits Pom Spider,Fruits Pom Spider,150,156532,1,8010,8037,1,632,847,240,115,156,85,178,88,139,102,10,12,1,4,62,0x2003885,250,864,1056,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4670,1
|
||||
3508,DR_EGGRING_G,Eggring,Eggring,20,220,1,0,0,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
//3509,MOON_RABBIT
|
||||
//3510,POPE_MD_E_GUARD
|
||||
//3511,POPE_MD_E_BELIEVER_1
|
||||
|
@ -3,6 +3,11 @@
|
||||
// Structure of Database:
|
||||
// Quest ID,Time Limit,Target1,Val1,Target2,Val2,Target3,Val3,MobID1,NameID1,Rate1,MobID2,NameID2,Rate2,MobID3,NameID3,Rate3,Quest Title
|
||||
//
|
||||
// Time Limit* can be:
|
||||
// - in seconds ; date limit will be at [Current time + Time Limit]
|
||||
// - in HH-MM format ; date limit will be at [Time Limit] of the current day or at [Time Limit]
|
||||
// of the next day if [Time Limit] is lower than the current date.
|
||||
//
|
||||
// The MobID*, NameID*, and Rate* reflect special values for quests that can drop an item at given rate from given mob.
|
||||
// If no MobID* is given, then any mob has a chance to drop the given ItemID*.
|
||||
|
||||
@ -1448,6 +1453,21 @@
|
||||
//7628,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
|
||||
//7629,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
|
||||
|
||||
// Lasagna Quests
|
||||
7711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Beginning"
|
||||
7712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Where am I? Who am I??"
|
||||
7713,0,3495,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"First Battle!"
|
||||
7714,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Refreshing Apple Juice"
|
||||
7715,0,0,0,0,0,0,0,3495,1081,5000,0,0,0,0,0,0,"Midding Box"
|
||||
7716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To the Village!"
|
||||
7717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Merchant's Kindness"
|
||||
7718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"I'm used to this"
|
||||
7719,0,1078,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"Time to Digest"
|
||||
7720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Service Manual"
|
||||
7721,600,3496,3,3497,2,0,0,0,0,0,0,0,0,0,0,0,"Cat showoff contest"
|
||||
7722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EMT"
|
||||
7723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The potential within"
|
||||
|
||||
8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Quitting Job Change"
|
||||
8001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Assassin"
|
||||
8002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Assassin"
|
||||
@ -2316,6 +2336,19 @@
|
||||
//11366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
|
||||
11378,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Trick or treat" // Halloween Event 2013
|
||||
|
||||
// Lasagna Quests
|
||||
11435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11436,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11444,0,0,0,0,0,0,0,3499,25045,5000,0,0,0,0,0,0,"Vigilante Corp"
|
||||
11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vigilante Corp"
|
||||
|
||||
12000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"An old friend"
|
||||
12001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Digotz, Maku's old friend"
|
||||
12002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Messenger of Friendship"
|
||||
@ -2921,6 +2954,64 @@
|
||||
//14290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
|
||||
//14291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
|
||||
|
||||
// Lasagna Quests
|
||||
14531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Everything about Con-Chliina"
|
||||
14532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Greetings to Captain Gamberi"
|
||||
14533,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Say hi to recorder"
|
||||
14534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To the kitchen"
|
||||
14535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Purser"
|
||||
14536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Delivery to Chef"
|
||||
14537,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"When do we take off?"
|
||||
14538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Can we take off?"
|
||||
14539,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Crazy Dragon"
|
||||
14540,0,0,0,0,0,0,0,3502,25049,5000,0,0,0,0,0,0,"An errand out of nowhere"
|
||||
14541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"No news is not a good news"
|
||||
14542,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"How is the Dragon"
|
||||
14543,0,3502,20,0,0,0,0,0,0,0,0,0,0,0,0,0,"Basilisk Hunt"
|
||||
14544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Now I can leave"
|
||||
14545,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Purser"
|
||||
14546,0,3496,5,3497,5,0,0,0,0,0,0,0,0,0,0,0,"Take care of grass thief"
|
||||
14547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Can we set out the sailing?"
|
||||
14548,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Crazy Dragon"
|
||||
14549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"No news is not a good news"
|
||||
14550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"How is the Dragon"
|
||||
14551,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Chief Basilisk"
|
||||
14552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Lord Imuk's message"
|
||||
14553,0,3504,20,0,0,0,0,0,0,0,0,0,0,0,0,0,"Basilisk Hunt"
|
||||
14554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"We can start sail now"
|
||||
14555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Whole new world of taste"
|
||||
14556,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"There also is a scary thing for me"
|
||||
14557,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Truth is alway harsh"
|
||||
14558,0,0,0,0,0,0,0,3503,25049,5000,0,0,0,0,0,0,"Dirty Creatures"
|
||||
14559,04:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Charm Effect Duration"
|
||||
14560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"New Ingredient"
|
||||
14561,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dirty and Filty"
|
||||
14562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The basic are the best"
|
||||
14563,04:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Free time"
|
||||
14565,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Emergency food supplies"
|
||||
14566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Brilliant idea"
|
||||
14567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Kaluna milk is in Danger!"
|
||||
14568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Time to persuade"
|
||||
14569,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Babysitter"
|
||||
14570,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Processing Anchovy"
|
||||
14571,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Anchovy fishing ship"
|
||||
14572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Helpless..."
|
||||
14573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"I need the time on my own"
|
||||
14574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Meal Box Delivery"
|
||||
14575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Delivery Complete Report"
|
||||
14576,04:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Meal Box Delivery Time"
|
||||
14579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Interview with Captain"
|
||||
14580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Recorder"
|
||||
14581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Interview with the Chief"
|
||||
14582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Recorder"
|
||||
14583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Granma"
|
||||
14584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Back to Recorder"
|
||||
14588,0,3498,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"The Competition"
|
||||
14589,0,3499,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Sticky ingredient"
|
||||
14590,0,3500,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hunter's destination"
|
||||
14591,0,3501,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Secret Ingredient"
|
||||
14592,04:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Resting Time"
|
||||
|
||||
// Academy 14.2
|
||||
15000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Experiencing abnormal statuses"
|
||||
15001,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hold your breath"
|
||||
|
@ -4171,7 +4171,7 @@ The command will run for the invoking character unless an account ID is given.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*classchange <view id>,<type>;
|
||||
*classchange(<view id>{,"<NPC name>","<flag>"});
|
||||
|
||||
This command is very ancient, its origins are clouded in mystery.
|
||||
It will send a 'display id change' packet to everyone in the immediate area of
|
||||
@ -4191,6 +4191,12 @@ run will actually just crash the client.
|
||||
It could be a real gem if it can be gotten to actually do what it's supposed to
|
||||
do, but this will only happen in a later SVN revision.
|
||||
|
||||
Empty <NPC name> means attached NPC.
|
||||
|
||||
Target for <flag>:
|
||||
- bc_area : Sprite is sent to players in the vicinity of the source (default value).
|
||||
- bc_self : Sprite is sent only to player attached.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*changesex({<char_id>});
|
||||
@ -6179,13 +6185,19 @@ Returns true if the command was executed on the other NPC successfully, false if
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*npctalk "<message>"{,"<NPC name>"};
|
||||
*npctalk "<message>"{,"<NPC name>","<flag>"};
|
||||
|
||||
This command will display a message to the surrounding area as if the NPC object
|
||||
running it was a player talking - that is, above their head and in the chat
|
||||
window. The display name of the NPC won't get appended in front of the message.
|
||||
If the <NPC name> option is given, then that NPC will display the message, else
|
||||
the attached NPC will display the message.
|
||||
This command will display a message as if the NPC object running it was a player
|
||||
talking - that is, above their head and in the chat window.
|
||||
The display name of the NPC won't get appended in front of the message.
|
||||
If the <NPC name> option is given and not empty, then that NPC will display the message,
|
||||
else the attached NPC will display the message.
|
||||
|
||||
Target for <flag>:
|
||||
- bc_all : Broadcast message is sent server-wide (only in the chat window).
|
||||
- bc_map : Message is sent to everyone in the same map as the source of the npc.
|
||||
- bc_area : Message is sent to players in the vicinity of the source (default value).
|
||||
- bc_self : Message is sent only to player attached.
|
||||
|
||||
// This will make everyone in the area see the NPC greet the character
|
||||
// who just invoked it.
|
||||
@ -7386,9 +7398,12 @@ Suggest to use 'unitblockmove' to forcefully stop the unit with OnTouch.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*unittalk <GID>,"<text>";
|
||||
*unittalk <GID>,"<text>"{,flag};
|
||||
|
||||
This command will make a <GID> say a message. The display name of the <GID> won't get appended in front of the message.
|
||||
flag: Specify target
|
||||
bc_area - Message is sent to players in the vicinity of the source (default).
|
||||
bc_self - Message is sent only to player attached.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
|
28
npc/re/custom/lasagna/lasa_dun.txt
Normal file
28
npc/re/custom/lasagna/lasa_dun.txt
Normal file
@ -0,0 +1,28 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Lasagna Dungeons Monsters Spawn Script
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First Version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
//==================================================
|
||||
// lasa_dun01 - Dragon's Nest
|
||||
//==================================================
|
||||
lasa_dun01,0,0 monster Trans Spore 3501,40
|
||||
lasa_dun01,0,0 monster Scout Basilisk 3502,40
|
||||
|
||||
//==================================================
|
||||
// lasa_dun02 - Dragon's Nest
|
||||
//==================================================
|
||||
lasa_dun02,0,0 monster Combat Basilisk 3503,40
|
||||
lasa_dun02,0,0 monster Jungle Madragora 3506,40
|
||||
|
||||
//==================================================
|
||||
// lasa_dun03 - Dragon's Nest
|
||||
//==================================================
|
||||
lasa_dun03,0,0 monster Combat Basilisk 3504,80
|
||||
lasa_dun03,0,0 monster Fruits Pom Spider 3507,80
|
||||
|
||||
//==================================================
|
||||
// lasa_dun_q - Dragon's Nest
|
||||
//==================================================
|
||||
lasa_dun_q,0,0 monster Scout Basilisk 3502,40
|
24
npc/re/custom/lasagna/lasa_fild.txt
Normal file
24
npc/re/custom/lasagna/lasa_fild.txt
Normal file
@ -0,0 +1,24 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Lasagna Fild Monster Spawn Script
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First Version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
//==================================================
|
||||
// lasa_fild01 - Ravioli Plain Watch
|
||||
//==================================================
|
||||
lasa_fild01,0,0 monster Eggring 3495,30
|
||||
lasa_fild01,0,0 monster Leaf Lunatic 3496,30
|
||||
lasa_fild01,0,0 monster Grass Fabre 3497,30
|
||||
lasa_fild01,100,330,75,50 monster Eggring 3495,50
|
||||
lasa_fild01,100,330,75,50 monster Leaf Lunatic 3496,50
|
||||
lasa_fild01,100,330,75,50 monster Grass Fabre 3497,50
|
||||
lasa_fild01,140,365,15,15 monster Red Plant 1078,5
|
||||
|
||||
//==================================================
|
||||
// lasa_fild01 - Ravioli Forest
|
||||
//==================================================
|
||||
lasa_fild02,0,0 monster Wild Hornet 3498,40
|
||||
lasa_fild02,0,0 monster Sweet Roda Frog 3499,40
|
||||
lasa_fild02,0,0 monster Hunter Desert Wolf 3500,40
|
||||
lasa_fild02,0,0 monster Combat Basilisk 3502,5
|
10162
npc/re/custom/lasagna/lasagna_npcs.txt
Normal file
10162
npc/re/custom/lasagna/lasagna_npcs.txt
Normal file
File diff suppressed because it is too large
Load Diff
45
npc/re/custom/lasagna/warps.txt
Normal file
45
npc/re/custom/lasagna/warps.txt
Normal file
@ -0,0 +1,45 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Lasagna Warps
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First Version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
lasa_fild02,348,244,0 warp lasa_fild02#lasa_dun01 1,1,lasa_dun01,24,143
|
||||
lasa_dun01,18,143,0 warp lasa_dun01#lasa_fild02 1,1,lasa_fild02,344,243
|
||||
|
||||
lasa_dun_q,190,14,0 warp lasa_dun_q#lasa_dun01 1,1,lasa_dun01,152,98
|
||||
lasa_dun01,157,98,0 warp lasa_dun01#lasa_dun02 1,1,lasa_dun02,22,171
|
||||
lasa_dun02,18,171,0 warp lasa_dun02#lasa_dun01 1,1,lasa_dun01,153,98
|
||||
|
||||
lasa_dun02,146,58,0 warp lasa_dun02#lasa_dun03 1,1,lasa_dun03,190,18
|
||||
lasa_dun03,190,15,0 warp lasa_dun03#lasa_dun02 1,1,lasa_dun02,146,54
|
||||
|
||||
lasa_fild01,134,381,0 warp lasa_fild01#lasagna_1 2,2,lasagna,153,58
|
||||
lasagna,150,54,0 warp lasagna#lasa_fild01_1 2,2,lasa_fild01,131,378
|
||||
|
||||
lasa_fild01,341,375,0 warp lasa_fild01#lasagna_2 2,2,lasagna,327,56
|
||||
lasagna,327,51,0 warp lasagna#lasa_fild01_2 2,2,lasa_fild01,344,371
|
||||
|
||||
lasagna,358,91,0 warp lasagna#lasa_fild02 2,2,lasa_fild02,20,98
|
||||
lasa_fild02,16,98,0 warp lasa_fild02#lasagna 2,2,lasagna,355,92
|
||||
|
||||
lasa_in01,159,61,0 warp lasa_in01#lasagna 1,1,lasagna,68,202
|
||||
|
||||
// Boat
|
||||
conch_in,60,61,0 warp2 warp_conch_in#out 1,1,lasagna,206,323
|
||||
conch_in,51,60,0 warp2 warp_conch_in#A_B 1,1,conch_in,31,60
|
||||
conch_in,34,60,0 warp2 warp_conch_in#B_A 1,1,conch_in,53,59
|
||||
conch_in,63,53,0 warp2 warp_conch_in#C_D 1,1,conch_in,63,33
|
||||
conch_in,63,35,0 warp2 warp_conch_in#D_C 1,1,conch_in,64,55
|
||||
conch_in,64,66,0 warp2 warp_conch_in#E_F 1,1,conch_in,63,89
|
||||
conch_in,63,87,0 warp2 warp_conch_in#F_E 1,1,conch_in,63,64
|
||||
conch_in,101,53,0 warp2 warp_conch_in#G_H 1,1,conch_in,101,33
|
||||
conch_in,101,35,0 warp2 warp_conch_in#H_G 1,1,conch_in,102,55
|
||||
conch_in,101,66,0 warp2 warp_conch_in#I_J 1,1,conch_in,101,89
|
||||
conch_in,102,87,0 warp2 warp_conch_in#J_I 1,1,conch_in,101,64
|
||||
conch_in,137,53,0 warp2 warp_conch_in#K_L 1,1,conch_in,139,33
|
||||
conch_in,139,35,0 warp2 warp_conch_in#L_K 1,1,conch_in,138,55
|
||||
conch_in,137,66,0 warp2 warp_conch_in#M_N 1,1,conch_in,139,89
|
||||
conch_in,140,87,0 warp2 warp_conch_in#N_M 1,1,conch_in,137,64
|
||||
conch_in,142,60,0 warp2 warp_conch_in#O_P 1,1,conch_in,162,61
|
||||
conch_in,159,61,0 warp2 warp_conch_in#P_O 1,1,conch_in,140,59
|
@ -165,3 +165,9 @@ npc: npc/re/quests/woe_te/te_mission_alde.txt
|
||||
npc: npc/re/quests/woe_te/te_mission_prt.txt
|
||||
npc: npc/re/quests/woe_te/te_goditem_prt01.txt
|
||||
npc: npc/re/quests/woe_te/te_goditem_alde1.txt
|
||||
|
||||
// Lasagna npcs
|
||||
npc: npc/re/custom/lasagna/lasa_dun.txt
|
||||
npc: npc/re/custom/lasagna/lasa_fild.txt
|
||||
npc: npc/re/custom/lasagna/lasagna_npcs.txt
|
||||
npc: npc/re/custom/lasagna/warps.txt
|
||||
|
@ -1344,7 +1344,7 @@ static void clif_setdisguise(struct block_list *bl, unsigned char *buf,int len)
|
||||
/// 01b0 <id>.L <type>.B <value>.L
|
||||
/// type:
|
||||
/// unused
|
||||
void clif_class_change(struct block_list *bl,int class_,int type)
|
||||
void clif_class_change_target(struct block_list *bl,int class_,int type, enum send_target target, struct map_session_data *sd)
|
||||
{
|
||||
nullpo_retv(bl);
|
||||
|
||||
@ -1355,7 +1355,7 @@ void clif_class_change(struct block_list *bl,int class_,int type)
|
||||
WBUFL(buf,2)=bl->id;
|
||||
WBUFB(buf,6)=type;
|
||||
WBUFL(buf,7)=class_;
|
||||
clif_send(buf,packet_len(0x1b0),bl,AREA);
|
||||
clif_send(buf,packet_len(0x1b0),(sd == NULL ? bl : &(sd->bl)),target);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9295,9 +9295,9 @@ void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, sen
|
||||
|
||||
/// Monster/NPC color chat [SnakeDrak] (ZC_NPC_CHAT).
|
||||
/// 02c1 <packet len>.W <id>.L <color>.L <message>.?B
|
||||
void clif_messagecolor(struct block_list *bl, unsigned long color, const char *msg, bool rgb2bgr, enum send_target type) {
|
||||
void clif_messagecolor_target(struct block_list *bl, unsigned long color, const char *msg, bool rgb2bgr, enum send_target type, struct map_session_data *sd) {
|
||||
unsigned short msg_len = (unsigned short)(strlen(msg) + 1);
|
||||
uint8 buf[256];
|
||||
uint8 buf[CHAT_SIZE_MAX];
|
||||
|
||||
nullpo_retv(bl);
|
||||
|
||||
@ -9315,7 +9315,7 @@ void clif_messagecolor(struct block_list *bl, unsigned long color, const char *m
|
||||
WBUFL(buf,8) = color;
|
||||
memcpy(WBUFCP(buf,12), msg, msg_len);
|
||||
|
||||
clif_send(buf, WBUFW(buf,2), bl, type);
|
||||
clif_send(buf, WBUFW(buf,2), (sd == NULL ? bl : &(sd->bl)), type);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -9579,7 +9579,7 @@ void clif_slide(struct block_list *bl, int x, int y)
|
||||
|
||||
/// Public chat message (ZC_NOTIFY_CHAT). lordalfa/Skotlex - used by @me as well
|
||||
/// 008d <packet len>.W <id>.L <message>.?B
|
||||
void clif_disp_overhead(struct block_list *bl, const char* mes)
|
||||
void clif_disp_overhead_(struct block_list *bl, const char* mes, enum send_target flag)
|
||||
{
|
||||
unsigned char buf[256]; //This should be more than sufficient, the theorical max is CHAT_SIZE + 8 (pads and extra inserted crap)
|
||||
int len_mes = strlen(mes)+1; //Account for \0
|
||||
@ -9589,11 +9589,13 @@ void clif_disp_overhead(struct block_list *bl, const char* mes)
|
||||
len_mes = sizeof(buf)-8; //Trunk it to avoid problems.
|
||||
}
|
||||
// send message to others
|
||||
WBUFW(buf,0) = 0x8d;
|
||||
WBUFW(buf,2) = len_mes + 8; // len of message + 8 (command+len+id)
|
||||
WBUFL(buf,4) = bl->id;
|
||||
safestrncpy(WBUFCP(buf,8), mes, len_mes);
|
||||
clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC);
|
||||
if (flag == AREA) {
|
||||
WBUFW(buf,0) = 0x8d;
|
||||
WBUFW(buf,2) = len_mes + 8; // len of message + 8 (command+len+id)
|
||||
WBUFL(buf,4) = bl->id;
|
||||
safestrncpy(WBUFCP(buf,8), mes, len_mes);
|
||||
clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC);
|
||||
}
|
||||
|
||||
// send back message to the speaker
|
||||
if( bl->type == BL_PC ) {
|
||||
|
@ -635,7 +635,8 @@ void clif_storageclose(struct map_session_data* sd);
|
||||
int clif_insight(struct block_list *bl,va_list ap); // map_forallinmovearea callback
|
||||
int clif_outsight(struct block_list *bl,va_list ap); // map_forallinmovearea callback
|
||||
|
||||
void clif_class_change(struct block_list *bl,int class_,int type);
|
||||
void clif_class_change_target(struct block_list *bl,int class_, int type, enum send_target target, struct map_session_data *sd);
|
||||
#define clif_class_change(bl, class_, type) clif_class_change_target(bl, class_, type, AREA, NULL)
|
||||
#define clif_mob_class_change(md, class_) clif_class_change(&md->bl, class_, 1)
|
||||
|
||||
void clif_skillinfoblock(struct map_session_data *sd);
|
||||
@ -821,7 +822,8 @@ void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_dat
|
||||
void clif_weather(int16 m); // [Valaris]
|
||||
void clif_specialeffect(struct block_list* bl, int type, enum send_target target); // special effects [Valaris]
|
||||
void clif_specialeffect_single(struct block_list* bl, int type, int fd);
|
||||
void clif_messagecolor(struct block_list *bl, unsigned long color, const char *msg, bool rgb2bgr, enum send_target type); // Mob/Npc color talk [SnakeDrak]
|
||||
void clif_messagecolor_target(struct block_list *bl, unsigned long color, const char *msg, bool rgb2bgr, enum send_target type, struct map_session_data *sd);
|
||||
#define clif_messagecolor(bl, color, msg, rgb2bgr, type) clif_messagecolor_target(bl, color, msg, rgb2bgr, type, NULL) // Mob/Npc color talk [SnakeDrak]
|
||||
void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, send_target target);
|
||||
|
||||
void clif_GM_kickack(struct map_session_data *sd, int id);
|
||||
@ -829,7 +831,8 @@ void clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd);
|
||||
void clif_manner_message(struct map_session_data* sd, uint32 type);
|
||||
void clif_GM_silence(struct map_session_data* sd, struct map_session_data* tsd, uint8 type);
|
||||
|
||||
void clif_disp_overhead(struct block_list *bl, const char* mes);
|
||||
void clif_disp_overhead_(struct block_list *bl, const char* mes, enum send_target flag);
|
||||
#define clif_disp_overhead(bl, mes) clif_disp_overhead_(bl, mes, AREA)
|
||||
|
||||
void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand);
|
||||
|
||||
|
@ -97,8 +97,23 @@ int quest_add(TBL_PC *sd, int quest_id)
|
||||
memset(&sd->quest_log[n], 0, sizeof(struct quest));
|
||||
|
||||
sd->quest_log[n].quest_id = qi->id;
|
||||
if( qi->time )
|
||||
sd->quest_log[n].time = (unsigned int)(time(NULL) + qi->time);
|
||||
if (qi->time) {
|
||||
if (qi->time_type == 0)
|
||||
sd->quest_log[n].time = (unsigned int)(time(NULL) + qi->time);
|
||||
else { // quest time limit at HH:MM
|
||||
int time_today;
|
||||
time_t t;
|
||||
struct tm * lt;
|
||||
|
||||
t = time(NULL);
|
||||
lt = localtime(&t);
|
||||
time_today = (lt->tm_hour) * 3600 + (lt->tm_min) * 60 + (lt->tm_sec);
|
||||
if (time_today < qi->time)
|
||||
sd->quest_log[n].time = (unsigned int)(time(NULL) + qi->time - time_today);
|
||||
else // next day
|
||||
sd->quest_log[n].time = (unsigned int)(time(NULL) + 86400 + qi->time - time_today);
|
||||
}
|
||||
}
|
||||
sd->quest_log[n].state = Q_ACTIVE;
|
||||
|
||||
sd->save_quest = true;
|
||||
@ -148,8 +163,23 @@ int quest_change(TBL_PC *sd, int qid1, int qid2)
|
||||
memset(&sd->quest_log[i], 0, sizeof(struct quest));
|
||||
sd->quest_log[i].quest_id = qi->id;
|
||||
|
||||
if( qi->time )
|
||||
sd->quest_log[i].time = (unsigned int)(time(NULL) + qi->time);
|
||||
if (qi->time) {
|
||||
if (qi->time_type == 0)
|
||||
sd->quest_log[i].time = (unsigned int)(time(NULL) + qi->time);
|
||||
else { // quest time limit at HH:MM
|
||||
int time_today;
|
||||
time_t t;
|
||||
struct tm * lt;
|
||||
|
||||
t = time(NULL);
|
||||
lt = localtime(&t);
|
||||
time_today = (lt->tm_hour) * 3600 + (lt->tm_min) * 60 + (lt->tm_sec);
|
||||
if (time_today < qi->time)
|
||||
sd->quest_log[i].time = (unsigned int)(time(NULL) + qi->time - time_today);
|
||||
else // next day
|
||||
sd->quest_log[i].time = (unsigned int)(time(NULL) + 86400 + qi->time - time_today);
|
||||
}
|
||||
}
|
||||
|
||||
sd->quest_log[i].state = Q_ACTIVE;
|
||||
|
||||
@ -457,7 +487,21 @@ void quest_read_txtdb(void)
|
||||
}
|
||||
}
|
||||
|
||||
quest->time = atoi(str[1]);
|
||||
if (strchr(str[1],':') == NULL) {
|
||||
quest->time = atoi(str[1]);
|
||||
quest->time_type = 0;
|
||||
}
|
||||
else {
|
||||
unsigned char hour, min;
|
||||
|
||||
hour = atoi(str[1]);
|
||||
str[1] = strchr(str[1],':');
|
||||
*str[1] ++= 0;
|
||||
min = atoi(str[1]);
|
||||
|
||||
quest->time = hour * 3600 + min * 60;
|
||||
quest->time_type = 1;
|
||||
}
|
||||
|
||||
for(i = 0; i < MAX_QUEST_OBJECTIVES; i++) {
|
||||
uint16 mob_id = (uint16)atoi(str[2 * i + 2]);
|
||||
|
@ -27,6 +27,7 @@ struct quest_db {
|
||||
// TODO: find out if signed or unsigned in client
|
||||
int id;
|
||||
unsigned int time;
|
||||
bool time_type;
|
||||
uint8 objectives_count;
|
||||
struct quest_objective *objectives;
|
||||
uint8 dropitem_count;
|
||||
|
110
src/map/script.c
110
src/map/script.c
@ -13876,21 +13876,45 @@ BUILDIN_FUNC(undisguise)
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Transform a bl to another _class,
|
||||
* @type unused
|
||||
*------------------------------------------*/
|
||||
/**
|
||||
* Transform an NPC to another _class
|
||||
*
|
||||
* classchange(<view id>{,"<NPC name>","<flag>"});
|
||||
* @param flag: Specify target
|
||||
* BC_AREA - Sprite is sent to players in the vicinity of the source (default).
|
||||
* BC_SELF - Sprite is sent only to player attached.
|
||||
*/
|
||||
BUILDIN_FUNC(classchange)
|
||||
{
|
||||
int _class,type;
|
||||
struct block_list *bl=map_id2bl(st->oid);
|
||||
int _class, type = 1;
|
||||
struct npc_data* nd = NULL;
|
||||
TBL_PC *sd = map_id2sd(st->rid);
|
||||
send_target target = AREA;
|
||||
|
||||
if (bl==NULL)
|
||||
_class = script_getnum(st,2);
|
||||
|
||||
if (script_hasdata(st, 3) && strlen(script_getstr(st,3)) > 0)
|
||||
nd = npc_name2id(script_getstr(st, 3));
|
||||
else
|
||||
nd = (struct npc_data *)map_id2bl(st->oid);
|
||||
|
||||
if (nd == NULL)
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
|
||||
_class=script_getnum(st,2);
|
||||
type=script_getnum(st,3);
|
||||
clif_class_change(bl,_class,type);
|
||||
if (script_hasdata(st, 4)) {
|
||||
switch(script_getnum(st, 4)) {
|
||||
case BC_SELF: target = SELF; break;
|
||||
case BC_AREA:
|
||||
default: target = AREA; break;
|
||||
}
|
||||
}
|
||||
if (target != SELF)
|
||||
clif_class_change(&nd->bl,_class,type);
|
||||
else if (sd == NULL)
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
else
|
||||
clif_class_change_target(&nd->bl,_class,type,target,sd);
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -14739,22 +14763,46 @@ BUILDIN_FUNC(message)
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* npctalk (sends message to surrounding area)
|
||||
*------------------------------------------*/
|
||||
/**
|
||||
* npctalk("<message>"{,"<NPC name>","<flag>"});
|
||||
* @param flag: Specify target
|
||||
* BC_ALL - Broadcast message is sent server-wide.
|
||||
* BC_MAP - Message is sent to everyone in the same map as the source of the npc.
|
||||
* BC_AREA - Message is sent to players in the vicinity of the source (default).
|
||||
* BC_SELF - Message is sent only to player attached.
|
||||
*/
|
||||
BUILDIN_FUNC(npctalk)
|
||||
{
|
||||
struct npc_data* nd = NULL;
|
||||
const char* str = script_getstr(st,2);
|
||||
|
||||
if (script_hasdata(st, 3))
|
||||
if (script_hasdata(st, 3) && strlen(script_getstr(st,3)) > 0)
|
||||
nd = npc_name2id(script_getstr(st, 3));
|
||||
else
|
||||
nd = (struct npc_data *)map_id2bl(st->oid);
|
||||
|
||||
if (nd != NULL) {
|
||||
char message[256];
|
||||
send_target target = AREA;
|
||||
char message[CHAT_SIZE_MAX];
|
||||
|
||||
if (script_hasdata(st, 4)) {
|
||||
switch(script_getnum(st, 4)) {
|
||||
case BC_ALL: target = ALL_CLIENT; break;
|
||||
case BC_MAP: target = ALL_SAMEMAP; break;
|
||||
case BC_SELF: target = SELF; break;
|
||||
case BC_AREA:
|
||||
default: target = AREA; break;
|
||||
}
|
||||
}
|
||||
safesnprintf(message, sizeof(message), "%s", str);
|
||||
clif_disp_overhead(&nd->bl, message);
|
||||
if (target != SELF)
|
||||
clif_messagecolor(&nd->bl, color_table[COLOR_WHITE], message, false, target);
|
||||
else {
|
||||
TBL_PC *sd = map_id2sd(st->rid);
|
||||
if (sd == NULL)
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
clif_messagecolor_target(&nd->bl, color_table[COLOR_WHITE], message, false, target, sd);
|
||||
}
|
||||
}
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
@ -18274,9 +18322,14 @@ BUILDIN_FUNC(unitstopwalk)
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/// Makes the unit say the given message.
|
||||
///
|
||||
/// unittalk <unit_id>,"<message>";
|
||||
/**
|
||||
* Makes the unit say the given message.
|
||||
*
|
||||
* unittalk <unit_id>,"<message>"{,"<flag>"};
|
||||
* @param flag: Specify target
|
||||
* bc_area - Message is sent to players in the vicinity of the source (default).
|
||||
* bc_self - Message is sent only to player attached.
|
||||
*/
|
||||
BUILDIN_FUNC(unittalk)
|
||||
{
|
||||
const char* message;
|
||||
@ -18286,11 +18339,22 @@ BUILDIN_FUNC(unittalk)
|
||||
|
||||
if(script_rid2bl(2,bl))
|
||||
{
|
||||
send_target target = AREA;
|
||||
struct StringBuf sbuf;
|
||||
|
||||
if (script_hasdata(st, 4)) {
|
||||
if (script_getnum(st, 4) == BC_SELF) {
|
||||
if (map_id2sd(bl->id) == NULL) {
|
||||
ShowWarning("script: unittalk: bc_self can't be used for non-players objects.\n");
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
target = SELF;
|
||||
}
|
||||
}
|
||||
|
||||
StringBuf_Init(&sbuf);
|
||||
StringBuf_Printf(&sbuf, "%s", message);
|
||||
clif_disp_overhead(bl, StringBuf_Value(&sbuf));
|
||||
clif_disp_overhead_(bl, StringBuf_Value(&sbuf), target);
|
||||
StringBuf_Destroy(&sbuf);
|
||||
}
|
||||
|
||||
@ -23382,7 +23446,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(getinventorylist,"?"),
|
||||
BUILDIN_DEF(getskilllist,"?"),
|
||||
BUILDIN_DEF(clearitem,"?"),
|
||||
BUILDIN_DEF(classchange,"ii"),
|
||||
BUILDIN_DEF(classchange,"i??"),
|
||||
BUILDIN_DEF(misceffect,"i"),
|
||||
BUILDIN_DEF(playBGM,"s"),
|
||||
BUILDIN_DEF(playBGMall,"s?????"),
|
||||
@ -23407,7 +23471,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF2(atcommand,"charcommand","s"), // [MouseJstr]
|
||||
BUILDIN_DEF(movenpc,"sii?"), // [MouseJstr]
|
||||
BUILDIN_DEF(message,"ss"), // [MouseJstr]
|
||||
BUILDIN_DEF(npctalk,"s?"), // [Valaris]
|
||||
BUILDIN_DEF(npctalk,"s??"), // [Valaris]
|
||||
BUILDIN_DEF(chatmes,"s?"), // [Jey]
|
||||
BUILDIN_DEF(mobcount,"ss"),
|
||||
BUILDIN_DEF(getlook,"i?"),
|
||||
@ -23528,7 +23592,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(unitattack,"iv?"),
|
||||
BUILDIN_DEF(unitstopattack,"i"),
|
||||
BUILDIN_DEF(unitstopwalk,"i"),
|
||||
BUILDIN_DEF(unittalk,"is"),
|
||||
BUILDIN_DEF(unittalk,"is?"),
|
||||
BUILDIN_DEF(unitemote,"ii"),
|
||||
BUILDIN_DEF(unitskilluseid,"ivi??"), // originally by Qamera [Celest]
|
||||
BUILDIN_DEF(unitskillusepos,"iviii?"), // [Celest]
|
||||
|
@ -1467,6 +1467,8 @@
|
||||
export_constant(SC_ARMOR_ELEMENT_FIRE);
|
||||
export_constant(SC_ARMOR_ELEMENT_WIND);
|
||||
export_constant(SC_DAILYSENDMAILCNT);
|
||||
export_constant(SC_DORAM_BUF_01);
|
||||
export_constant(SC_DORAM_BUF_02);
|
||||
#ifdef RENEWAL
|
||||
export_constant(SC_EXTREMITYFIST2);
|
||||
#endif
|
||||
|
@ -1872,7 +1872,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE:
|
||||
case SC_STRANGELIGHTS: case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST:
|
||||
case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2: case SC_BITE:
|
||||
case SC_ACTIVE_MONSTER_TRANSFORM:
|
||||
case SC_ACTIVE_MONSTER_TRANSFORM: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02:
|
||||
#ifdef RENEWAL
|
||||
case SC_EXTREMITYFIST2:
|
||||
#endif
|
||||
@ -7920,7 +7920,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_P_ALTER: case SC_E_CHAIN: case SC_C_MARKER:
|
||||
case SC_B_TRAP: case SC_H_MINE: case SC_STRANGELIGHTS:
|
||||
case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST: case SC_CHASEWALK2:
|
||||
case SC_ACTIVE_MONSTER_TRANSFORM:
|
||||
case SC_ACTIVE_MONSTER_TRANSFORM: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02:
|
||||
#ifdef RENEWAL
|
||||
case SC_EXTREMITYFIST2:
|
||||
#endif
|
||||
@ -9339,7 +9339,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF:
|
||||
case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE:
|
||||
case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT:
|
||||
case SC_SPRITEMABLE:
|
||||
case SC_SPRITEMABLE: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02:
|
||||
case SC_QUEST_BUFF1: case SC_QUEST_BUFF2: case SC_QUEST_BUFF3:
|
||||
case SC_CLAN_INFO: case SC_SWORDCLAN: case SC_ARCWANDCLAN:
|
||||
case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN:
|
||||
|
@ -1083,6 +1083,8 @@ void initChangeTables(void)
|
||||
|
||||
/* Summoners status icons */
|
||||
StatusIconChangeTable[SC_SPRITEMABLE] = SI_SPRITEMABLE;
|
||||
StatusIconChangeTable[SC_DORAM_BUF_01] = SI_DORAM_BUF_01;
|
||||
StatusIconChangeTable[SC_DORAM_BUF_02] = SI_DORAM_BUF_02;
|
||||
|
||||
// Item Reuse Limits
|
||||
StatusIconChangeTable[SC_REUSE_REFRESH] = SI_REUSE_REFRESH;
|
||||
@ -1266,6 +1268,10 @@ void initChangeTables(void)
|
||||
// RODEX
|
||||
StatusChangeFlagTable[SC_DAILYSENDMAILCNT] |= SCB_NONE;
|
||||
|
||||
// Doram Buffs
|
||||
StatusChangeFlagTable[SC_DORAM_BUF_01] |= SCB_REGEN;
|
||||
StatusChangeFlagTable[SC_DORAM_BUF_02] |= SCB_REGEN;
|
||||
|
||||
#ifdef RENEWAL
|
||||
// renewal EDP increases your weapon atk
|
||||
StatusChangeFlagTable[SC_EDP] |= SCB_WATK;
|
||||
@ -9086,6 +9092,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_REUSE_LIMIT_ECL:
|
||||
case SC_REUSE_LIMIT_RECALL:
|
||||
case SC_REUSE_LIMIT_ASPD_POTION:
|
||||
case SC_DORAM_BUF_01:
|
||||
case SC_DORAM_BUF_02:
|
||||
return 0;
|
||||
case SC_PUSH_CART:
|
||||
case SC_COMBO:
|
||||
@ -10811,6 +10819,12 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
tick = -1;
|
||||
status_change_start(src,bl,SC_CLAN_INFO,10000,0,val2,0,0,-1,flag);
|
||||
break;
|
||||
case SC_DORAM_BUF_01:
|
||||
case SC_DORAM_BUF_02:
|
||||
tick_time = 10000; // every 10 seconds
|
||||
if( (val4 = tick/tick_time) < 1 )
|
||||
val4 = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == -1 && StatusIconChangeTable[type] == SI_BLANK ) {
|
||||
@ -11496,6 +11510,8 @@ int status_change_clear(struct block_list* bl, int type)
|
||||
case SC_REUSE_STORMBLAST:
|
||||
case SC_ALL_RIDING_REUSE_LIMIT:
|
||||
case SC_SPRITEMABLE:
|
||||
case SC_DORAM_BUF_01:
|
||||
case SC_DORAM_BUF_02:
|
||||
case SC_GEFFEN_MAGIC1:
|
||||
case SC_GEFFEN_MAGIC2:
|
||||
case SC_GEFFEN_MAGIC3:
|
||||
@ -13245,6 +13261,22 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
sc_timer_next((10000 - ((sce->val1 - 1) * 1000)) + tick, status_change_timer, bl->id, data);
|
||||
}
|
||||
break;
|
||||
case SC_DORAM_BUF_01:
|
||||
if( sd && --(sce->val4) >= 0 ) {
|
||||
if( status->hp < status->max_hp )
|
||||
status_heal(bl, 10, 0, 2);
|
||||
sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case SC_DORAM_BUF_02:
|
||||
if( sd && --(sce->val4) >= 0 ) {
|
||||
if( status->sp < status->max_sp )
|
||||
status_heal(bl, 0, 5, 2);
|
||||
sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// If status has an interval and there is at least 100ms remaining time, wait for next interval
|
||||
|
@ -804,6 +804,9 @@ typedef enum sc_type {
|
||||
|
||||
SC_DAILYSENDMAILCNT,
|
||||
|
||||
SC_DORAM_BUF_01,
|
||||
SC_DORAM_BUF_02,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user