From 7081f0ce7a12ef0ccca5a8f63634e295f2e09e91 Mon Sep 17 00:00:00 2001 From: Jeric Date: Thu, 20 Mar 2014 17:18:40 +0800 Subject: [PATCH 1/5] Update script_commands.txt Added documentation for switch statement. --- doc/script_commands.txt | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 09a993545c..44dce41bd9 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -1964,6 +1964,64 @@ with this command when a script is parsed. --------------------------------------- +*switch (expression); + +The switch statement is similar to a series of if statements on the same expression. +In many occasions, you may want to compare the same variable (or expression) +with many different values, and execute a different piece of code depending +on which value it equals to. This is exactly what the switch statement is for. + +It is important to understand how the switch statement is executed in order +to avoid mistakes. The switch statement executes line by line (actually, statement by statement). +In the beginning, no code is executed. Only when a case statement is found +with a value that matches the value of the switch expression the case statement(s) +will to executed. The parser continues to execute the statements until the end +of the switch block, or the first time it sees a break statement. If you don't +write a break statement at the end of a case's statement list, the parser will +go on executing the statements of the following case (fall-through). + +Example 1: + + switch(select("Yes:No")) { + case 1: + mes "You said yes!"; + break; + case 2: + mes "Aww, why?"; + break; + } + close; + +The example above would work like a menu and would go to the first case if +the user selects option, otherwise, would go to the second one. + +Example 2: + + switch(getgroupid()) { + case 1: + mes "Wow, you're super!"; + break; + case 2: + mes "A helping hand!"; + break; + case 3: + mes "10001010010011"; + break; + case 4: + mes "Yes, milord?"; + break; + default: + mes "Hello there!"; + break; + } + +The example above would print a message depending on the player's groupid. +If there is no statement declared for the corresponding groupid, the script +would use the 'default' statement that applies to rest of possible values, +similar to 'else' in the if-else statement. + +--------------------------------------- + *while () ; This is probably the simplest and most frequently used loop structure. The 'while' From 156c5c848de57d7897cdbea10ff40c698bcb73d0 Mon Sep 17 00:00:00 2001 From: Jeric Date: Mon, 24 Mar 2014 10:15:08 +0800 Subject: [PATCH 2/5] Minor fix on BG script. Based on this report. http://rathena.org/board/tracker/issue-8813-minor-warning-on-battleground-script/ --- npc/battleground/kvm/kvm_enter.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npc/battleground/kvm/kvm_enter.txt b/npc/battleground/kvm/kvm_enter.txt index 65593d7407..7e92d197ad 100644 --- a/npc/battleground/kvm/kvm_enter.txt +++ b/npc/battleground/kvm/kvm_enter.txt @@ -49,7 +49,7 @@ bat_room,164,178,5 script KVM Mercenary Officer#1 418,{ if (BaseLevel > 79) warp "bat_room",169,223; else if (BaseLevel < 60) warp "bat_room",197,223; else warp "bat_room",225,223; - close; + end; case 2: mes "[Guillaume Mercenary Officer]"; mes "We will win!"; @@ -149,7 +149,7 @@ bat_room,164,121,1 script KVM Mercenary Officer#2 414,{ if (BaseLevel > 79) warp "bat_room",169,207; else if (BaseLevel < 60) warp "bat_room",197,207; else warp "bat_room",225,207; - close; + end; case 2: mes "[Croix Mercenary Officer]"; mes "We will win!"; From e1903cb97a3fe5f87af5511c6208d51428a08b56 Mon Sep 17 00:00:00 2001 From: Euphy Date: Wed, 26 Mar 2014 01:47:37 -0400 Subject: [PATCH 3/5] Fixed some equip location itemscripts. (bugreport:8821) http://rathena.org/board/tracker/issue-8821-general-daehyon-card/ Added official names as comments in many newer scripts. Signed-off-by: Euphy --- db/re/item_db.txt | 8 +- npc/re/guild/invest_main.txt | 6 +- npc/re/merchants/advanced_refiner.txt | 2 + npc/re/merchants/alchemist.txt | 2 + npc/re/merchants/blessed_refiner.txt | 2 + npc/re/merchants/cash_trader-idRO.txt | 168 ++++++++++++-------------- npc/re/merchants/diamond.txt | 2 + npc/re/merchants/enchan_upg.txt | 2 + npc/re/merchants/flute.txt | 1 + npc/re/merchants/hd_refiner.txt | 4 +- npc/re/merchants/quivers.txt | 2 + sql-files/item_db_re.sql | 8 +- 12 files changed, 103 insertions(+), 104 deletions(-) diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 2bdbb9b4c4..33cce664e4 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -2579,12 +2579,12 @@ 4571,Gertie_Card,Gertie Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee,10; skill "RG_CLOSECONFINE",1; },{},{} 4572,Randel_Card,Randel Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee,10; skill "CR_AUTOGUARD",3; },{},{} 4573,Trentini_Card,Trentini Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee,10; if(BaseJob==Job_Dancer) { bonus bMaxHPrate,10; bonus bMaxSPrate,5;} },{},{} -4574,General_Daehyon_Card,General Daehyon Card,6,20,,10,,,,,,,,2,,,,,{ if((getiteminfo(getequipid(EQI_HAND_R),14) == 3) || (getiteminfo(getequipid(EQI_HAND_R),14) == 4)) { bonus bBaseAtk,100; } },{},{} -4575,Armed_Guard_Soheon_Card,Armed Guard Soheon Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,10; if(getiteminfo(getequipid(EQI_HAND_R),14) == 1) { if(getrefine()>=10) { bonus bAspd,1; } if(getrefine()>=14) { bonus bAspd,1; } } },{},{} +4574,General_Daehyon_Card,General Daehyon Card,6,20,,10,,,,,,,,2,,,,,{ if((getiteminfo(getequipid(EQI_HAND_R),11) == 3) || (getiteminfo(getequipid(EQI_HAND_R),11) == 4)) { bonus bBaseAtk,100; } },{},{} +4575,Armed_Guard_Soheon_Card,Armed Guard Soheon Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,10; if(getiteminfo(getequipid(EQI_HAND_R),11) == 1) { if(getrefine()>=10) { bonus bAspd,1; } if(getrefine()>=14) { bonus bAspd,1; } } },{},{} 4576,Gioia_Card,Gioia Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bMagicAtkEle,4,100; bonus2 bMagicAtkEle,8,100; bonus2 bSubEle,0,-30; bonus2 bSubEle,1,-30; bonus2 bSubEle,2,-30; bonus2 bSubEle,3,-30; bonus2 bSubEle,4,-30; bonus2 bSubEle,5,-30; bonus2 bSubEle,6,-30; bonus2 bSubEle,7,-30; bonus2 bSubEle,8,-30; bonus2 bSubEle,9,-30; },{},{} 4577,Elvira_Card,Elvira Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bMagicAtkEle,4,20; bonus2 bMagicAtkEle,8,20; },{},{} 4578,Angry_Student_Pyuriel_Card,Angry Student Pyuriel Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,30; bonus2 bSubRace,0,-10; bonus2 bSubRace,1,-10; bonus2 bSubRace,2,-10; bonus2 bSubRace,3,-10; bonus2 bSubRace,4,-10; bonus2 bSubRace,5,-10; bonus2 bSubRace,6,-10; bonus2 bSubRace,7,-10; bonus2 bSubRace,8,-10; bonus2 bSubRace,9,-10; },{},{} -4579,Warrior_Lola_Card,Warrior Lola Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),14) == 8) { bonus bBaseAtk,20; bonus bCritical,10; } bonus bBaseAtk,getrefine(); bonus bCritical,getrefine(); },{},{} +4579,Warrior_Lola_Card,Warrior Lola Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11) == 8) { bonus bBaseAtk,20; bonus bCritical,10; } bonus bBaseAtk,getrefine(); bonus bCritical,getrefine(); },{},{} 4580,Dark_Guardian_Kades_Card,Dark Guardian Kades Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,1,50; bonus2 bSubEle,2,50; bonus2 bSubEle,3,50; bonus2 bSubEle,4,50; bonus2 bSubEle,7,50; bonus2 bSubEle,9,50; bonus2 bSubEle,6,-100; bonus2 bSubEle,8,-100; },{},{} 4581,Rudo_Card,Rudo Card,6,20,,10,,,,,,,,64,,,,,{ /* TODO: { heal 0,-40; bonus_script "{ bonus bAgi,44; }",3,15,0; sc_start SC_SpeedUp1,3000,0; } */},{},{} 4582,Bungisngis_Card,Bungisngis Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,(getrefine()/2); },{},{} @@ -2612,7 +2612,7 @@ 4604,Realized_Corruption_Root_Card,Realized Corruption Root Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus5 bAutoSpellWhenHit,"NPC_WIDESTONE",2,70,BF_WEAPON,0; bonus5 bAutoSpellWhenHit,"NPC_WIDESLEEP",2,70,BF_WEAPON,0; bonus5 bAutoSpellWhenHit,"NPC_WIDECURSE",2,70,BF_WEAPON,0; },{},{} 4605,Agony_Of_Royal_Knight_Card,Agony Of Royal Knight Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMaxHPrate,-44; bonus bHPGainValue,200+10*getrefine(); },{},{} 4606,Grudge_of_Royal_Knight_Card,Grudge of Royal Knight Card,6,20,,10,,,,,,,,4,,,,,{ bonus bMaxSPrate,-44; bonus bSPGainValue,20+(getrefine()/2); },{},{ heal 0,-444; } -4607,Faithful_Manager_Card,Faithful Manager Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),14) == 15) { if(getrefine()>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(getrefine()>=14) { bonus bBaseAtk,20; bonus bMatk,20; } } },{},{} +4607,Faithful_Manager_Card,Faithful Manager Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),11) == 15) { if(getrefine()>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(getrefine()>=14) { bonus bBaseAtk,20; bonus bMatk,20; } } },{},{} 4608,White_Knight_Card,White Knight Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,15; bonus2 bAddSize,Size_Medium,20; bonus2 bAddSize,Size_Large,20; },{},{} 4609,Khalitzburg_Knight_Card,Khalitzburg Knight Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,20; bonus2 bSubSize,Size_Medium,25; bonus2 bSubSize,Size_Large,25; },{},{} diff --git a/npc/re/guild/invest_main.txt b/npc/re/guild/invest_main.txt index 95b1ea701e..4f08fa3219 100644 --- a/npc/re/guild/invest_main.txt +++ b/npc/re/guild/invest_main.txt @@ -224,7 +224,7 @@ function script F_Invest_Abyss { } } -// Script Core +// Script Core :: agit_fund //============================================================ prt_gld,1,1,0 script #fund_master 844,{ end; @@ -1252,7 +1252,7 @@ L_Enter: } } -// Item Investments +// Item Investments :: tooja_namis //============================================================ malangdo,218,126,4 script Cat Paw Merchants Notice 857,{ mes "<< Cat Paw Merchants Notice >>"; @@ -1458,7 +1458,7 @@ OnTouch: end; } -// Investment Rewards +// Investment Rewards :: tooja_japanki //============================================================ malangdo,215,119,4 script Thanks Ticket Machine 564,{ if (MaxWeight - Weight < 4500 || checkweight(1201,1) == 0) { diff --git a/npc/re/merchants/advanced_refiner.txt b/npc/re/merchants/advanced_refiner.txt index ab487a4da6..482fa6d570 100644 --- a/npc/re/merchants/advanced_refiner.txt +++ b/npc/re/merchants/advanced_refiner.txt @@ -18,6 +18,8 @@ //= 1.0 Added Malangdo Refiner "Holink". [Euphy] //============================================================ +// Main NPC :: mal_jerun +//============================================================ malangdo,221,174,6 script Holink#mal_cash 559,{ disable_items; mes "[Holink]"; diff --git a/npc/re/merchants/alchemist.txt b/npc/re/merchants/alchemist.txt index 396e693304..eb36d0a311 100644 --- a/npc/re/merchants/alchemist.txt +++ b/npc/re/merchants/alchemist.txt @@ -14,6 +14,8 @@ //= Updated dialogue to match the official script. //============================================================ +// Main NPC :: craft_book_alche_skill_npc +//============================================================ alde_alche,31,186,3 script Craft Book Merchant#alde 883,{ mes "[Craft Book Merchant]"; mes "Welcome."; diff --git a/npc/re/merchants/blessed_refiner.txt b/npc/re/merchants/blessed_refiner.txt index cc3db5da87..20b94e89f2 100644 --- a/npc/re/merchants/blessed_refiner.txt +++ b/npc/re/merchants/blessed_refiner.txt @@ -17,6 +17,8 @@ //= 1.0 First version. [Euphy] //============================================================ +// Main NPC :: new_smelting612 +//============================================================ - script ::BlacksmithDister -1,{ disable_items; mes "[Blacksmith Dister]"; diff --git a/npc/re/merchants/cash_trader-idRO.txt b/npc/re/merchants/cash_trader-idRO.txt index 89855cccb9..3810bc11fc 100644 --- a/npc/re/merchants/cash_trader-idRO.txt +++ b/npc/re/merchants/cash_trader-idRO.txt @@ -1,5 +1,5 @@ //===== rAthena Script ======================================= -//= Cash Shop NPCs +//= idRO Cash Shop NPCs //===== By: ================================================== //= Cydh //===== Current Version: ===================================== @@ -7,7 +7,7 @@ //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= -//= Sell Cash shop items based on idRO's Cash shop +//= Sells cash shop items based on idRO's cash shop. //===== Additional Comments: ================================= //= 1.0 Initial release. 2014-Jan-13 [Cydh] //= 1.1 2014-Jan-18 [Cydh] @@ -17,8 +17,7 @@ // - Added Cash Trader with special offer for Chinese New Year //============================================================ -//============================================================ -//Main NPCs +// Main NPCs //============================================================ - cashshop idROCK::idRO_kafra 721,12202:150,12203:150,12204:150,12205:150,12206:150,12207:150,12208:200,12209:250,12909:375,12910:375,12213:25000,12214:250,12215:150,12216:150,12217:150,12218:150,12219:150,12220:150,7619:200,7620:150,7621:100,12210:200,5210:20000,2234:10000,2235:10000,2271:10000,5229:7500,5227:7500,5229:7500,5233:7500,5231:7500,5232:7500,5230:7500,5236:7500,5235:7500,5237:7500,5241:7500,5240:7500,5238:7500,5239:7500,5242:7500,5294:12500,5292:12500,5291:12500,5284:12500,5139:12500,5140:12500,13569:350,13849:250,13850:450,13851:250,13852:450,13853:250,13854:450,13855:205,13856:450,13857:400,13858:750,13905:5500,13906:32500,13907:2750,13908:20000,13909:1000,13910:3750,5478:12500,5385:12500,5137:12500,5491:12500,5335:12500,5463:12500,5293:12500,5198:12500,5289:12500,5258:12500,5143:12500,5334:12500,5099:12500,5211:12500,5333:12500,5288:12500,5257:12500,5285:12500,5189:12500,5146:12500,5142:12500,5138:12500,5188:12500,5212:12500,5181:12500,5182:12500,5129:12500,5185:12500,5186:12500,5253:12500,5256:12500,5287:12500,5490:12500,5501:12500,5502:12500,5498:12500,5495:12500,5503:12500,5499:12500,5505:12500,5496:12500,2289:5000,5066:5000,5003:5000,5497:12500,5504:6250,5508:12500,5467:12500,13420:12500,5364:12500,5546:12500,5545:12500,2291:725,2274:4250,5550:12500,5549:12500,5547:12500,5657:7500,5548:7500,5537:12500,5538:12500,5539:12500,5470:12500,5471:12500,5511:12500,5526:12500,5529:12500,5527:12500,5509:12500,5363:12500,5395:12500,5464:12500,5563:12500,5528:12500,5558:12500,5554:12500,5555:12500,5556:12500,5557:12500,5514:12500,5515:12500,5316:12500,6240:7500,6241:10000,5396:12500,5573:12500,15008:12500,7823:100,5584:12500,5765:12500,5766:12500,5767:12500,2855:12500,5789:12500,5790:12500,5776:12500,5413:12500,5594:12500,5585:12500,17079:12500,18533:12500,5777:12500,18531:12500,6114:100,6115:100,5148:12500,5530:12500,5359:15000,18616:7500,18618:10000,18626:15000,18589:12500,18596:12500,18619:12500,18620:12500,19507:12500,19515:12500,19517:12500,19516:12500,19509:12500,19510:10000,19513:7500,19514:7500,6046:2500,6047:2500 - cashshop idROCK2::idRO_kafra2 80,19518:12500,19519:12500,19520:12500,19521:12500,19522:12500,15058:12500,2888:5000,2751:5000,2573:35000,18630:12500,18636:12500,18665:12500,18666:12500,18676:12500,18679:12500,18681:12500,5575:12500,5591:12500,18872:12500,17126:2250,6225:15000,6226:11250,6104:100,6108:100,6112:100,6097:100,18574:12500,18697:12500,18698:12500,18729:12500,2936:12500,2177:12500,18692:12500,18694:12500,18695:12500,17106:15000,7776:2000,5045:12500,14616:250,14617:250,14618:250,14619:250,14620:250,14621:250,16770:4750,16771:19000,16979:2000,18642:12500,18643:12500,18644:12500,7825:5000,5403:12500,5020:12500,18713:12500,18759:12500 @@ -32,8 +31,7 @@ - cashshop idROCA2::idRO_acc2 80,4253:7500,4113:3750,4268:2000,2888:5000,2751:5000 - cashshop idROCR::idRO_rental 874,12936:625,13775:925,13770:1000,13767:1000,13772:625,13768:925,12944:925,12940:625,13956:925,13954:1000,13955:1000,13958:1000,13957:1000,12951:625,12953:625,13783:625,13784:925,13953:652,12947:652,12948:652,12949:652,13502:652,13778:925,13779:625,13782:925,12938:1000,13952:925,12937:1000,13766:1000,13773:625,14321:1000,14322:925,14323:925,14324:925,14325:925,14326:925,14327:925,14328:925,14329:925,14330:925,14426:925,14427:925,14428:925,14429:1000,14430:1000,14431:1000,14432:1250,14433:1500,14434:1500,14435:625,14436:625,14437:925,14242:925,14243:925,14244:925,14245:925,14246:925,14247:925,14248:925,14249:925,14250:925,14251:925,14252:1500,14253:1500,14254:1500,14255:1500,14256:1500,14257:1500,14258:1500,14259:1500,14260:1500,14261:1500,13771:1000,13654:925,13656:625,13653:925,13663:625,13671:925,13672:925,13673:925,13674:925,13675:925,13650:925,13657:925,16638:625,16639:1000,16374:625,16389:1000,16372:625,16385:1000,17396:1250,17397:7000,17398:1250,17399:7000,17416:1250,17417:7000,17422:1250,17423:7000,16628:10000,17311:2000,17404:1250,17405:7000,17408:1250,17409:7000,17418:1250,17419:7000,17420:1250,17421:7000,16625:10000,17308:2000,17400:1250,17401:7000,17406:1250,17407:7000,17410:1250,17411:7000,17412:1250,17413:7000,17414:1250,17415:7000,17424:1250,17425:7000,17426:1250,17427:7000,16682:2500 -//============================================================ -//Payon +// Payon //============================================================ payon,172,128,3 duplicate(idRO_kafra) Kafra Shop#pay 721 payon,172,130,3 duplicate(idRO_kafra2) Kafra Shop 2#pay 80 @@ -55,33 +53,35 @@ payon,177,226,3 duplicate(idRO_kafra) Kafra Shop#pay-2 721 payon,178,226,3 duplicate(idRO_kafra2) Kafra Shop 2#pay-2 80 payon,181,226,3 duplicate(idRO_rental) Rental Shop#pay-2 874 -//============================================================ -//Archer Village +// Archer Village //============================================================ pay_arche,57,125,3 duplicate(idRO_kafra) Kafra Shop#payarc 721 pay_arche,58,125,1 duplicate(idRO_kafra2) Kafra Shop 2#payarc 80 pay_arche,61,125,8 duplicate(idRO_rental) Rental Shop#payarc 874 +// Prontera //============================================================ -//Prontera -//============================================================ -//East-Gate +// East-Gate prontera,282,198,1 duplicate(idRO_kafra) Kafra Shop#prt-1 721 prontera,282,197,1 duplicate(idRO_kafra2) Kafra Shop 2#prt-1 80 prontera,282,194,1 duplicate(idRO_rental) Rental Shop#prt-1 874 -//West-Gate + +// West-Gate prontera,29,209,5 duplicate(idRO_kafra) Kafra Shop#prt-2 721 prontera,29,210,5 duplicate(idRO_kafra2) Kafra Shop 2#prt-2 80 prontera,32,212,5 duplicate(idRO_rental) Rental Shop#prt-2 874 -//South + +// South prontera,146,91,5 duplicate(idRO_kafra) Kafra Shop#prt-3 721 prontera,146,92,5 duplicate(idRO_kafra2) Kafra Shop 2#prt-3 80 prontera,146,95,5 duplicate(idRO_rental) Rental Shop#prt-3 874 -//South-Gate + +// South-Gate prontera,149,29,8 duplicate(idRO_kafra) Kafra Shop#prt-4 721 prontera,148,29,8 duplicate(idRO_kafra2) Kafra Shop 2#prt-4 80 prontera,145,29,8 duplicate(idRO_rental) Rental Shop#prt-4 874 -//Center + +// Center prontera,164,183,3 duplicate(idRO_kafra) Kafra Shop#prt 721 prontera,164,185,3 duplicate(idRO_kafra2) Kafra Shop 2#prt 80 prontera,151,183,3 duplicate(idRO_cons) Consumable#prt 721 @@ -94,32 +94,13 @@ prontera,161,183,3 duplicate(idRO_acc) Acc and Kartu#prt 721 prontera,161,185,3 duplicate(idRO_acc2) Acc and Kartu 2#prt 80 prontera,148,183,3 duplicate(idRO_rental) Rental Shop#prt 874 -//============================================================ -//Izlude-Old (Use this if use old Izlude Map) -//============================================================ -//izlude,134,86,3 duplicate(idRO_kafra) Kafra Shop#izl-1 721 -//izlude,134,85,3 duplicate(idRO_kafra2) Kafra Shop 2#izl-1 80 -//izlude,134,91,3 duplicate(idRO_rental) Rental Shop#izl-1 874 -//Center -//izlude,136,113,3 duplicate(idRO_kafra) Kafra Shop#izl 721 -//izlude,136,115,3 duplicate(idRO_kafra2) Kafra Shop 2#izl 80 -//izlude,124,113,3 duplicate(idRO_cons) Consumable#izl 721 -//izlude,124,115,3 duplicate(idRO_cons2) Consumable 2#izl 80 -//izlude,127,113,3 duplicate(idRO_gear) Headgear#izl 721 -//izlude,127,115,3 duplicate(idRO_gear2) Headgear 2#izl 80 -//izlude,130,113,3 duplicate(idRO_eq) Equipment#izl 721 -//izlude,130,115,3 duplicate(idRO_eq2) Equipment 2#izl 80 -//izlude,133,113,3 duplicate(idRO_acc) Acc and Kartu#izl 721 -//izlude,133,115,3 duplicate(idRO_acc2) Acc and Kartu 2#izl 80 -//izlude,121,113,3 duplicate(idRO_rental) Rental Shop#izl 874 - -//============================================================ -//Izlude-New +// Izlude //============================================================ izlude,135,99,3 duplicate(idRO_kafra) Kafra Shop#izl-1 721 izlude,135,100,3 duplicate(idRO_kafra2) Kafra Shop 2#izl-1 80 izlude,135,102,3 duplicate(idRO_rental) Rental Shop#izl-1 874 -//Center + +// Center izlude,135,142,3 duplicate(idRO_kafra) Kafra Shop#izl 721 izlude,135,144,3 duplicate(idRO_kafra2) Kafra Shop 2#izl 80 izlude,124,142,3 duplicate(idRO_cons) Consumable#izl 721 @@ -132,21 +113,39 @@ izlude,133,142,3 duplicate(idRO_acc) Acc and Kartu#izl 721 izlude,133,144,3 duplicate(idRO_acc2) Acc and Kartu 2#izl 80 izlude,121,142,3 duplicate(idRO_rental) Rental Shop#izl 874 -//============================================================ -//Byalan +/* Pre-Renewal locations */ + +//izlude,134,86,3 duplicate(idRO_kafra) Kafra Shop#izl-1 721 +//izlude,134,85,3 duplicate(idRO_kafra2) Kafra Shop 2#izl-1 80 +//izlude,134,91,3 duplicate(idRO_rental) Rental Shop#izl-1 874 + +// Center +//izlude,136,113,3 duplicate(idRO_kafra) Kafra Shop#izl 721 +//izlude,136,115,3 duplicate(idRO_kafra2) Kafra Shop 2#izl 80 +//izlude,124,113,3 duplicate(idRO_cons) Consumable#izl 721 +//izlude,124,115,3 duplicate(idRO_cons2) Consumable 2#izl 80 +//izlude,127,113,3 duplicate(idRO_gear) Headgear#izl 721 +//izlude,127,115,3 duplicate(idRO_gear2) Headgear 2#izl 80 +//izlude,130,113,3 duplicate(idRO_eq) Equipment#izl 721 +//izlude,130,115,3 duplicate(idRO_eq2) Equipment 2#izl 80 +//izlude,133,113,3 duplicate(idRO_acc) Acc and Kartu#izl 721 +//izlude,133,115,3 duplicate(idRO_acc2) Acc and Kartu 2#izl 80 +//izlude,121,113,3 duplicate(idRO_rental) Rental Shop#izl 874 + +// Byalan //============================================================ izlu2dun,108,57,3 duplicate(idRO_kafra) Kafra Shop#byl 721 izlu2dun,109,57,3 duplicate(idRO_kafra2) Kafra Shop 2#byl 80 izlu2dun,104,57,3 duplicate(idRO_rental) Rental Shop#byl 874 +// Alberta //============================================================ -//Alberta -//============================================================ -//Center +// Center alberta,113,63,5 duplicate(idRO_kafra) Kafra Shop#alb-1 721 alberta,114,64,3 duplicate(idRO_kafra2) Kafra Shop 2#alb-1 80 alberta,110,59,5 duplicate(idRO_rental) Rental Shop#alb-1 874 -//Left-Top + +// Left-Top alberta,32,229,8 duplicate(idRO_kafra) Kafra Shop#alb-2 721 alberta,31,229,8 duplicate(idRO_kafra2) Kafra Shop 2#alb-2 80 alberta,34,229,8 duplicate(idRO_rental) Rental Shop#alb-2 874 @@ -163,8 +162,7 @@ alberta,37,238,3 duplicate(idRO_acc) Acc and Kartu#alb 721 alberta,37,240,3 duplicate(idRO_acc2) Acc and Kartu 2#alb 80 alberta,40,238,3 duplicate(idRO_rental) Rental Shop#alb 874 -//============================================================ -//Brasilis +// Brasilis //============================================================ brasilis,199,218,3 duplicate(idRO_kafra) Kafra Shop#bra 721 brasilis,198,220,3 duplicate(idRO_kafra2) Kafra Shop 2#bra 80 @@ -178,29 +176,25 @@ brasilis,197,218,3 duplicate(idRO_acc) Acc and Kartu#bra 721 brasilis,196,220,3 duplicate(idRO_acc2) Acc and Kartu 2#bra 80 brasilis,201,218,3 duplicate(idRO_rental) Rental Shop#bra 874 -//============================================================ -//Amatsu +// Amatsu //============================================================ amatsu,101,147,3 duplicate(idRO_kafra) Kafra Shop#ama 721 amatsu,100,146,5 duplicate(idRO_kafra2) Kafra Shop 2#ama 80 amatsu,100,144,5 duplicate(idRO_rental) Rental Shop#ama 874 -//============================================================ -//Ayothaya +// Ayothaya //============================================================ ayothaya,212,171,5 duplicate(idRO_kafra) Kafra Shop#ayo 721 ayothaya,212,172,5 duplicate(idRO_kafra2) Kafra Shop 2#ayo 80 ayothaya,212,175,5 duplicate(idRO_rental) Rental Shop#ayo 874 -//============================================================ -//Louyang +// Louyang //============================================================ louyang,208,102,3 duplicate(idRO_kafra) Kafra Shop#lou 721 louyang,207,102,3 duplicate(idRO_kafra2) Kafra Shop 2#lou 80 louyang,205,102,3 duplicate(idRO_rental) Rental Shop#lou 874 -//============================================================ -//Dewata +// Dewata //============================================================ dewata,204,178,3 duplicate(idRO_kafra) Kafra Shop#dew 721 dewata,204,180,3 duplicate(idRO_kafra2) Kafra Shop 2#dew 80 @@ -214,26 +208,26 @@ dewata,201,178,3 duplicate(idRO_acc) Acc and Kartu#dew 721 dewata,201,180,3 duplicate(idRO_acc2) Acc and Kartu 2#dew 80 dewata,207,178,3 duplicate(idRO_rental) Rental Shop#dew 874 +// Juno //============================================================ -//Juno -//============================================================ -//Center +// Center yuno,149,187,3 duplicate(idRO_kafra) Kafra Shop#yun-1 721 yuno,148,187,3 duplicate(idRO_kafra2) Kafra Shop 2#yun-1 80 yuno,146,187,3 duplicate(idRO_rental) Rental Shop#yun-1 874 -//Right + +// Right yuno,329,108,3 duplicate(idRO_kafra) Kafra Shop#yun-2 721 yuno,330,108,3 duplicate(idRO_kafra2) Kafra Shop 2#yun-2 80 yuno,332,108,3 duplicate(idRO_rental) Rental Shop#yun-2 874 +// Morocc //============================================================ -//Morocc -//============================================================ -//Center +// Center morocc,154,97,3 duplicate(idRO_kafra) Kafra Shop#moc-1 721 morocc,153,97,3 duplicate(idRO_kafra2) Kafra Shop 2#moc-1 80 morocc,151,97,3 duplicate(idRO_rental) Rental Shop#moc-1 874 -//Top + +// Top morocc,163,258,3 duplicate(idRO_kafra) Kafra Shop#moc-2 721 morocc,162,258,3 duplicate(idRO_kafra2) Kafra Shop 2#moc-2 80 morocc,165,258,3 duplicate(idRO_rental) Rental Shop#moc-2 874 @@ -250,25 +244,25 @@ morocc,164,261,3 duplicate(idRO_acc) Acc and Kartu#moc 721 morocc,164,263,3 duplicate(idRO_acc2) Acc and Kartu 2#moc 80 morocc,152,261,3 duplicate(idRO_rental) Rental Shop#moc 874 -//============================================================ -//Gonryun +// Gonryun //============================================================ gonryun,156,122,3 duplicate(idRO_kafra) Kafra Shop#gon 721 gonryun,155,122,3 duplicate(idRO_kafra2) Kafra Shop 2#gon 80 gonryun,153,122,3 duplicate(idRO_rental) Rental Shop#gon 874 +// Geffen //============================================================ -//Geffen -//============================================================ -//South +// South geffen,122,62,8 duplicate(idRO_kafra) Kafra Shop#gef-1 721 geffen,122,60,3 duplicate(idRO_kafra2) Kafra Shop 2#gef-1 80 geffen,124,62,8 duplicate(idRO_rental) Rental Shop#gef-1 874 -//East + +// East geffen,200,124,1 duplicate(idRO_kafra) Kafra Shop#gef-2 721 geffen,201,124,3 duplicate(idRO_kafra2) Kafra Shop 2#gef-2 80 geffen,198,124,1 duplicate(idRO_rental) Rental Shop#gef-2 874 -//Center + +// Center geffen,129,103,3 duplicate(idRO_kafra) Kafra Shop#gef 721 geffen,129,105,3 duplicate(idRO_kafra2) Kafra Shop 2#gef 80 geffen,117,103,3 duplicate(idRO_cons) Consumable#gef 721 @@ -281,62 +275,55 @@ geffen,126,103,3 duplicate(idRO_acc) Acc and Kartu#gef 721 geffen,126,105,3 duplicate(idRO_acc2) Acc and Kartu 2#gef 80 geffen,114,103,3 duplicate(idRO_rental) Rental Shop#gef 874 -//============================================================ -//Aldebaran +// Aldebaran //============================================================ aldebaran,146,119,3 duplicate(idRO_kafra) Kafra Shop#alde 721 aldebaran,145,119,3 duplicate(idRO_kafra2) Kafra Shop 2#alde 80 aldebaran,148,119,3 duplicate(idRO_rental) Rental Shop#alde 874 -//============================================================ -//Comodo +// Comodo //============================================================ comodo,198,148,3 duplicate(idRO_kafra) Kafra Shop#cmd 721 comodo,200,148,3 duplicate(idRO_kafra2) Kafra Shop 2#cmd 80 comodo,202,148,3 duplicate(idRO_rental) Rental Shop#cmd 874 -//============================================================ -//Umbala +// Umbala //============================================================ umbala,90,159,3 duplicate(idRO_kafra) Kafra Shop#um 721 umbala,89,159,3 duplicate(idRO_kafra2) Kafra Shop 2#um 80 umbala,94,158,3 duplicate(idRO_rental) Rental Shop#um 874 -//============================================================ -//Hugel +// Hugel //============================================================ hugel,97,167,3 duplicate(idRO_kafra) Kafra Shop#hu 721 hugel,95,167,3 duplicate(idRO_kafra2) Kafra Shop 2#hu 80 hugel,100,167,3 duplicate(idRO_rental) Rental Shop#hu 874 +// Einbroch //============================================================ -//Einbroch -//============================================================ -//West +// West einbroch,58,200,8 duplicate(idRO_kafra) Kafra Shop#einbr 721 einbroch,58,201,8 duplicate(idRO_kafra2) Kafra Shop 2#einbr 80 einbroch,58,197,8 duplicate(idRO_rental) Rental Shop#einbr 874 -//East + +// East einbroch,245,205,3 duplicate(idRO_kafra) Kafra Shop#einbr-1 721 einbroch,244,205,3 duplicate(idRO_kafra2) Kafra Shop 2#einbr-1 80 einbroch,248,205,3 duplicate(idRO_rental) Rental Shop#einbr-1 874 -//============================================================ -//Einbeich +// Einbech //============================================================ einbech,174,132,8 duplicate(idRO_kafra) Kafra Shop#ein 721 einbech,175,132,8 duplicate(idRO_kafra2) Kafra Shop 2#ein 80 einbech,170,132,8 duplicate(idRO_rental) Rental Shop#ein 874 -//============================================================ -//Lighthalzen +// Lighthalzen //============================================================ lighthalzen,167,101,3 duplicate(idRO_kafra) Kafra Shop#lhz 721 lighthalzen,166,101,3 duplicate(idRO_kafra2) Kafra Shop 2#lhz 80 lighthalzen,169,103,3 duplicate(idRO_rental) Rental Shop#lhz 874 -//============================================================ -//Rachel +// Rachel //============================================================ rachel,98,131,3 duplicate(idRO_kafra) Kafra Shop#ra 721 rachel,98,133,3 duplicate(idRO_kafra2) Kafra Shop 2#ra 80 @@ -350,8 +337,7 @@ rachel,100,131,3 duplicate(idRO_acc) Acc and Kartu#ra 721 rachel,100,133,3 duplicate(idRO_acc2) Acc and Kartu 2#ra 80 rachel,95,131,3 duplicate(idRO_rental) Rental Shop#ra 874 -//=========================================================== -//Special Prices of Chinese New Year 2014 -//=========================================================== -- cashshop idROC2014::idRO_C2014 721,2936:6250,2177:6250,18574:6250,6225:7500,6226:5625,5381:7500,5210:10000,5294:6250,5463:6250,5335:6250,5256:6250,5495:6250,18630:6250,19518:6250,19519:6250,19520:6250,2573:6250,15058:6250,5490:6250,5498:6250,5253:6250,5502:6250,5526:6250,5529:6250,19509:6250,5359:7500,18729:6250,18666:6250,5284:6250,5471:6250,5467:6250,5363:6250,5546:6250,5334:6250,1472:5000,13420:6250,1392:5000,15008:6250,1731:3750,1825:2500,1261:1875,5545:6250,5550:6250,5549:6250,5515:6250,5514:6250,5470:6250,5505:6250,18695:6250,18694:6250 -prontera,156,178,3 duplicate(idRO_C2014) Kafra Shop#C2014_prt 721 +// Special Prices for Chinese New Year 2014 +//============================================================ +//- cashshop idROC2014::idRO_C2014 721,2936:6250,2177:6250,18574:6250,6225:7500,6226:5625,5381:7500,5210:10000,5294:6250,5463:6250,5335:6250,5256:6250,5495:6250,18630:6250,19518:6250,19519:6250,19520:6250,2573:6250,15058:6250,5490:6250,5498:6250,5253:6250,5502:6250,5526:6250,5529:6250,19509:6250,5359:7500,18729:6250,18666:6250,5284:6250,5471:6250,5467:6250,5363:6250,5546:6250,5334:6250,1472:5000,13420:6250,1392:5000,15008:6250,1731:3750,1825:2500,1261:1875,5545:6250,5550:6250,5549:6250,5515:6250,5514:6250,5470:6250,5505:6250,18695:6250,18694:6250 +//prontera,156,178,3 duplicate(idRO_C2014) Kafra Shop#C2014_prt 721 diff --git a/npc/re/merchants/diamond.txt b/npc/re/merchants/diamond.txt index 09fee2b699..d182ab2093 100644 --- a/npc/re/merchants/diamond.txt +++ b/npc/re/merchants/diamond.txt @@ -18,6 +18,8 @@ //= 1.5 Added This Version History (#15429) //============================================================ +// Main NPC :: diamond +//============================================================ - script RareDiamondMerchant 58,{ set .@npc$, "[Rare Diamond Merchant]"; diff --git a/npc/re/merchants/enchan_upg.txt b/npc/re/merchants/enchan_upg.txt index 242283076a..d678db00d2 100644 --- a/npc/re/merchants/enchan_upg.txt +++ b/npc/re/merchants/enchan_upg.txt @@ -14,6 +14,8 @@ //= 1.1 Standardizing, grammar and bug fixes. [Euphy] //============================================================ +// Main NPC :: 201105_luk_enc +//============================================================ prt_in,28,73,3 script Devil Enchant Master#prq 63,{ disable_items; if (checkweight(1201,1) == 0) { diff --git a/npc/re/merchants/flute.txt b/npc/re/merchants/flute.txt index 6f7fbee82c..e6514c6fda 100644 --- a/npc/re/merchants/flute.txt +++ b/npc/re/merchants/flute.txt @@ -15,6 +15,7 @@ //= 1.2 Added Wolf Flute trader, optimized. [Euphy] //= 1.2a Fixed some conditions. [Euphy] //============================================================ + // Falcon Flute :: falcon_flute //============================================================ - script Falcon Flute Trader::fflute -1,{ diff --git a/npc/re/merchants/hd_refiner.txt b/npc/re/merchants/hd_refiner.txt index eb4672e199..a5da27b2a0 100644 --- a/npc/re/merchants/hd_refiner.txt +++ b/npc/re/merchants/hd_refiner.txt @@ -18,7 +18,7 @@ //= 1.0 First version. [Euphy] //============================================================ -// Blacksmith Mighty Hammer (+7~9) +// Blacksmith Mighty Hammer (+7~9) :: cash_smelting79 //============================================================ - script ::MightyHammer -1,{ disable_items; @@ -153,7 +153,7 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 826 // iRO NPC locations: // payon,174,133,4 duplicate(MightyHammer) Mighty Hammer#im 826 -// Basta (+10 and up) +// Basta (+10 and up) :: cash_smelting //============================================================ - script ::Basta -1,{ disable_items; diff --git a/npc/re/merchants/quivers.txt b/npc/re/merchants/quivers.txt index ec67ea25ef..add10a4b5e 100644 --- a/npc/re/merchants/quivers.txt +++ b/npc/re/merchants/quivers.txt @@ -19,6 +19,8 @@ //= 1.1 Updated to match the official scripts. [Euphy] //============================================================ +// Mora :: ep14_1_tre +//============================================================ mora,106,117,3 script Quiver Maker#mora 516,{ if (checkweight(1201,1) == 0) { mes "[Quiver Maker]"; diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index ba7bc9aa3a..ccc85f1e70 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -2610,12 +2610,12 @@ REPLACE INTO `item_db_re` VALUES (4570,'Flamel_Card','Flamel Card',6,20,NULL,10, REPLACE INTO `item_db_re` VALUES (4571,'Gertie_Card','Gertie Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bFlee,10; skill "RG_CLOSECONFINE",1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4572,'Randel_Card','Randel Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bFlee,10; skill "CR_AUTOGUARD",3;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4573,'Trentini_Card','Trentini Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bFlee,10; if(BaseJob==Job_Dancer) { bonus bMaxHPrate,10; bonus bMaxSPrate,5;}',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4574,'General_Daehyon_Card','General Daehyon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if((getiteminfo(getequipid(EQI_HAND_R),14) == 3) || (getiteminfo(getequipid(EQI_HAND_R),14) == 4)) { bonus bBaseAtk,100; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4575,'Armed_Guard_Soheon_Card','Armed Guard Soheon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; if(getiteminfo(getequipid(EQI_HAND_R),14) == 1) { if(getrefine()>=10) { bonus bAspd,1; } if(getrefine()>=14) { bonus bAspd,1; } }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4574,'General_Daehyon_Card','General Daehyon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if((getiteminfo(getequipid(EQI_HAND_R),11) == 3) || (getiteminfo(getequipid(EQI_HAND_R),11) == 4)) { bonus bBaseAtk,100; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4575,'Armed_Guard_Soheon_Card','Armed Guard Soheon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; if(getiteminfo(getequipid(EQI_HAND_R),11) == 1) { if(getrefine()>=10) { bonus bAspd,1; } if(getrefine()>=14) { bonus bAspd,1; } }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4576,'Gioia_Card','Gioia Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bMagicAtkEle,4,100; bonus2 bMagicAtkEle,8,100; bonus2 bSubEle,0,-30; bonus2 bSubEle,1,-30; bonus2 bSubEle,2,-30; bonus2 bSubEle,3,-30; bonus2 bSubEle,4,-30; bonus2 bSubEle,5,-30; bonus2 bSubEle,6,-30; bonus2 bSubEle,7,-30; bonus2 bSubEle,8,-30; bonus2 bSubEle,9,-30;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4577,'Elvira_Card','Elvira Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bMagicAtkEle,4,20; bonus2 bMagicAtkEle,8,20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4578,'Angry_Student_Pyuriel_Card','Angry Student Pyuriel Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,30; bonus2 bSubRace,0,-10; bonus2 bSubRace,1,-10; bonus2 bSubRace,2,-10; bonus2 bSubRace,3,-10; bonus2 bSubRace,4,-10; bonus2 bSubRace,5,-10; bonus2 bSubRace,6,-10; bonus2 bSubRace,7,-10; bonus2 bSubRace,8,-10; bonus2 bSubRace,9,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4579,'Warrior_Lola_Card','Warrior Lola Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getiteminfo(getequipid(EQI_HAND_R),14) == 8) { bonus bBaseAtk,20; bonus bCritical,10; } bonus bBaseAtk,getrefine(); bonus bCritical,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4579,'Warrior_Lola_Card','Warrior Lola Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getiteminfo(getequipid(EQI_HAND_R),11) == 8) { bonus bBaseAtk,20; bonus bCritical,10; } bonus bBaseAtk,getrefine(); bonus bCritical,getrefine();',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4580,'Dark_Guardian_Kades_Card','Dark Guardian Kades Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,1,50; bonus2 bSubEle,2,50; bonus2 bSubEle,3,50; bonus2 bSubEle,4,50; bonus2 bSubEle,7,50; bonus2 bSubEle,9,50; bonus2 bSubEle,6,-100; bonus2 bSubEle,8,-100;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4581,'Rudo_Card','Rudo Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'/* TODO: { heal 0,-40; bonus_script "{ bonus bAgi,44; }",3,15,0; sc_start SC_SpeedUp1,3000,0; } */',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4582,'Bungisngis_Card','Bungisngis Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,(getrefine()/2);',NULL,NULL); @@ -2643,7 +2643,7 @@ REPLACE INTO `item_db_re` VALUES (4603,'Corruption_Root_Card','Corruption Root C REPLACE INTO `item_db_re` VALUES (4604,'Realized_Corruption_Root_Card','Realized Corruption Root Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus5 bAutoSpellWhenHit,"NPC_WIDESTONE",2,70,BF_WEAPON,0; bonus5 bAutoSpellWhenHit,"NPC_WIDESLEEP",2,70,BF_WEAPON,0; bonus5 bAutoSpellWhenHit,"NPC_WIDECURSE",2,70,BF_WEAPON,0;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4605,'Agony_Of_Royal_Knight_Card','Agony Of Royal Knight Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,-44; bonus bHPGainValue,200+10*getrefine();',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4606,'Grudge_of_Royal_Knight_Card','Grudge of Royal Knight Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bMaxSPrate,-44; bonus bSPGainValue,20+(getrefine()/2);',NULL,'heal 0,-444;'); -REPLACE INTO `item_db_re` VALUES (4607,'Faithful_Manager_Card','Faithful Manager Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),14) == 15) { if(getrefine()>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(getrefine()>=14) { bonus bBaseAtk,20; bonus bMatk,20; } }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4607,'Faithful_Manager_Card','Faithful Manager Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),11) == 15) { if(getrefine()>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(getrefine()>=14) { bonus bBaseAtk,20; bonus bMatk,20; } }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4608,'White_Knight_Card','White Knight Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,15; bonus2 bAddSize,Size_Medium,20; bonus2 bAddSize,Size_Large,20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4609,'Khalitzburg_Knight_Card','Khalitzburg Knight Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bDef,20; bonus2 bSubSize,Size_Medium,25; bonus2 bSubSize,Size_Large,25;',NULL,NULL); From 6e795af5c19e46b36f13c0c668f4913bad03e74d Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 26 Mar 2014 09:27:03 -0400 Subject: [PATCH 4/5] Added the remaining part to the official expiration timer. (Hercules 7120b55) --- src/map/map.c | 3 ++ src/map/pc.c | 76 +++++++++++++++++++++++++++++++++++++++++++++------ src/map/pc.h | 11 ++++++++ 3 files changed, 82 insertions(+), 8 deletions(-) diff --git a/src/map/map.c b/src/map/map.c index fdc4db9383..631e55fcdf 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1646,6 +1646,9 @@ int map_quit(struct map_session_data *sd) { return 0; } + if (sd->expiration_tid != INVALID_TIMER) + delete_timer(sd->expiration_tid, pc_expiration_timer); + if (sd->npc_timer_id != INVALID_TIMER) //Cancel the event timer. npc_timerevent_quit(sd); diff --git a/src/map/pc.c b/src/map/pc.c index b1b3564fe3..0409569afe 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -62,8 +62,10 @@ static unsigned int level_penalty[3][CLASS_MAX][MAX_LEVEL*2+1]; // h-files are for declarations, not for implementations... [Shinomori] struct skill_tree_entry skill_tree[CLASS_COUNT][MAX_SKILL_TREE]; // timer for night.day implementation -int day_timer_tid; -int night_timer_tid; +int day_timer_tid = INVALID_TIMER; +int night_timer_tid = INVALID_TIMER; + +int pc_expiration_tid = INVALID_TIMER; struct fame_list smith_fame_list[MAX_FAME_LIST]; struct fame_list chemist_fame_list[MAX_FAME_LIST]; @@ -1033,6 +1035,7 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim sd->invincible_timer = INVALID_TIMER; sd->npc_timer_id = INVALID_TIMER; sd->pvp_timer = INVALID_TIMER; + sd->expiration_tid = INVALID_TIMER; #ifdef SECURE_NPCTIMEOUT // Initialize to defaults/expected @@ -1138,12 +1141,8 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim clif_displaymessage(sd->fd, motd_text[i]); } - // message of the limited time of the account - if (expiration_time != 0) { // don't display if it's unlimited or unknow value - char tmpstr[1024]; - strftime(tmpstr, sizeof(tmpstr) - 1, msg_txt(sd,501), localtime(&expiration_time)); // "Your account time limit is: %d-%m-%Y %H:%M:%S." - clif_wis_message(sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1); - } + if (expiration_time != 0) + sd->expiration_time = expiration_time; /** * Fixes login-without-aura glitch (the screen won't blink at this point, don't worry :P) @@ -1345,6 +1344,15 @@ int pc_reg_received(struct map_session_data *sd) clif_parse_LoadEndAck(sd->fd, sd); } + if (sd->expiration_time != 0) { // don't display if it's unlimited or an unknown value + time_t exp_time = sd->expiration_time; + char tmpstr[1024]; + strftime(tmpstr, sizeof(tmpstr) - 1, msg_txt(sd,501), localtime(&sd->expiration_time)); // "Your account time limit is: %d-%m-%Y %H:%M:%S." + clif_wis_message(sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1); + + pc_expire_check(sd); + } + return 1; } @@ -10501,6 +10509,56 @@ void pc_damage_log_clear(struct map_session_data *sd, int id) } } +int pc_expiration_timer(int tid, unsigned int tick, int id, intptr_t data) { + struct map_session_data *sd = map_id2sd(id); + + if( !sd ) return 0; + + sd->expiration_tid = INVALID_TIMER; + + if( sd->fd ) + clif_authfail_fd(sd->fd,10); + + map_quit(sd); + + return 0; +} + +/* this timer exists only when a character with a expire timer > 24h is online */ +/* it loops thru online players once an hour to check whether a new < 24h is available */ +int pc_global_expiration_timer(int tid, unsigned int tick, int id, intptr_t data) { + struct s_mapiterator* iter; + struct map_session_data* sd; + + iter = mapit_getallusers(); + + for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) ) + if( sd->expiration_time ) + pc_expire_check(sd); + + mapit_free(iter); + + return 0; +} + +void pc_expire_check(struct map_session_data *sd) { + /* ongoing timer */ + if( sd->expiration_tid != INVALID_TIMER ) + return; + + /* not within the next 24h, enable the global check */ + if( sd->expiration_time > (time(NULL) + ((60 * 60) * 24)) ) { + + /* global check not running, enable */ + if( pc_expiration_tid == INVALID_TIMER ) /* Starts in 1h, repeats every hour */ + pc_expiration_tid = add_timer_interval(gettick() + ((1000 * 60) * 60), pc_global_expiration_timer, 0, 0, ((1000 * 60) * 60)); + + return; + } + + sd->expiration_tid = add_timer(gettick() + (unsigned int)(sd->expiration_time - time(NULL)) * 1000, pc_expiration_timer, sd->bl.id, 0); +} + /** * Deposit some money to bank * @param sd @@ -10734,6 +10792,8 @@ void do_init_pc(void) { add_timer_func_list(pc_follow_timer, "pc_follow_timer"); add_timer_func_list(pc_endautobonus, "pc_endautobonus"); add_timer_func_list(pc_talisman_timer, "pc_talisman_timer"); + add_timer_func_list(pc_global_expiration_timer, "pc_global_expiration_timer"); + add_timer_func_list(pc_expiration_timer, "pc_expiration_timer"); add_timer(gettick() + autosave_interval, pc_autosave, 0, 0); diff --git a/src/map/pc.h b/src/map/pc.h index 4c6ba7e6e3..bb4dbb466c 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -587,8 +587,15 @@ struct map_session_data { int16 icon; int tid; } bonus_script[MAX_PC_BONUS_SCRIPT]; + + /* Expiration Timer ID */ + int expiration_tid; + time_t expiration_time; }; +/* Global Expiration Timer ID */ +extern int pc_expiration_tid; + enum weapon_type { W_FIST, //Bare hands W_DAGGER, //1 @@ -831,6 +838,10 @@ int pc_checkskill(struct map_session_data *sd,uint16 skill_id); short pc_checkequip(struct map_session_data *sd,int pos); bool pc_checkequip2(struct map_session_data *sd,int nameid,int min, int max); +int pc_expiration_timer(int tid, unsigned int tick, int id, intptr_t data); +int pc_global_expiration_timer(int tid, unsigned tick, int id, intptr_t data); +void pc_expire_check(struct map_session_data *sd); + int pc_calc_skilltree(struct map_session_data *sd); int pc_calc_skilltree_normalize_job(struct map_session_data *sd); void pc_clean_skilltree(struct map_session_data *sd); From 14301f36403c251e83f93db16a7ff038b42143a8 Mon Sep 17 00:00:00 2001 From: Jeric Date: Thu, 27 Mar 2014 13:29:03 +0800 Subject: [PATCH 5/5] Minor fix on siege set combo. Based on.. http://rathena.org/board/tracker/issue-8825-siege-suit-set-bonus/ --- db/re/item_combo_db.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/re/item_combo_db.txt b/db/re/item_combo_db.txt index 8d2d6d5667..d03ab87e6e 100644 --- a/db/re/item_combo_db.txt +++ b/db/re/item_combo_db.txt @@ -138,7 +138,7 @@ 2479:2580:2890:15042,{ bonus bAspd,2; bonus2 bSkillAtk,"RA_ARROWSTORM",50; bonus bLongAtkRate,30; bonus3 bAutoSpell,"AC_DOUBLE",(getskilllv("AC_DOUBLE") < 3)?3:getskilllv("AC_DOUBLE"),20; } 2480:2581:2891:15043,{ bonus bMaxHPRate,15; bonus bFlee2,20; bonus2 bSkillAtk,"RA_CLUSTERBOMB",20; bonus bLongAtkRate,-30; bonus bAspd,-7; } 2483:2586:15046,{ bonus2 bSubRace,RC_DemiHuman,15; bonus2 bSubRace,RC_Player,15; } -2484:2587:15047,{ bonus bDex,5; bonus2 bSubRace,RC_DemiHuman,15; bonus2 bSubRace,RC_Player,15; } +2484:2586:15047,{ bonus bDex,5; bonus2 bSubRace,RC_DemiHuman,15; bonus2 bSubRace,RC_Player,15; } 2485:2587:15048,{ bonus bInt,5; bonus bMdef,10; bonus2 bSubRace,RC_DemiHuman,15; bonus2 bSubRace,RC_Player,15; } 2518:2648:2649:5126,{ bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel,0; bonus bVariableCastrate,25; } 2519:2650:2651:5127,{ bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; }