Merge branch 'rathena/master'

This commit is contained in:
Cydh Ramdh 2014-03-27 13:48:41 +07:00
commit f756d7e249
18 changed files with 246 additions and 115 deletions

View File

@ -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; }

View File

@ -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; },{},{}

View File

@ -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 (<condition>) <statement>;
This is probably the simplest and most frequently used loop structure. The 'while'

View File

@ -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!";

View File

@ -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) {

View File

@ -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]";

View File

@ -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.";

View File

@ -17,6 +17,8 @@
//= 1.0 First version. [Euphy]
//============================================================
// Main NPC :: new_smelting612
//============================================================
- script ::BlacksmithDister -1,{
disable_items;
mes "[Blacksmith Dister]";

View File

@ -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,7 +17,6 @@
// - Added Cash Trader with special offer for Chinese New Year
//============================================================
//============================================================
// 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
@ -32,7 +31,6 @@
- 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,172,128,3 duplicate(idRO_kafra) Kafra Shop#pay 721
@ -55,32 +53,34 @@ 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
//============================================================
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
//============================================================
// 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
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
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
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
prontera,164,183,3 duplicate(idRO_kafra) Kafra Shop#prt 721
prontera,164,185,3 duplicate(idRO_kafra2) Kafra Shop 2#prt 80
@ -94,31 +94,12 @@ 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
izlude,135,142,3 duplicate(idRO_kafra) Kafra Shop#izl 721
izlude,135,144,3 duplicate(idRO_kafra2) Kafra Shop 2#izl 80
@ -132,20 +113,38 @@ 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
//============================================================
/* 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
//============================================================
// 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
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
@ -163,7 +162,6 @@ 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,199,218,3 duplicate(idRO_kafra) Kafra Shop#bra 721
@ -178,28 +176,24 @@ 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,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,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,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,204,178,3 duplicate(idRO_kafra) Kafra Shop#dew 721
@ -214,25 +208,25 @@ 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
//============================================================
// 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
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
//============================================================
// 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
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
@ -250,24 +244,24 @@ 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,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
//============================================================
// 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
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
geffen,129,103,3 duplicate(idRO_kafra) Kafra Shop#gef 721
geffen,129,105,3 duplicate(idRO_kafra2) Kafra Shop 2#gef 80
@ -281,61 +275,54 @@ 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,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,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,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,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
//============================================================
// 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
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,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,98,131,3 duplicate(idRO_kafra) Kafra Shop#ra 721
@ -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

View File

@ -18,6 +18,8 @@
//= 1.5 Added This Version History (#15429)
//============================================================
// Main NPC :: diamond
//============================================================
- script RareDiamondMerchant 58,{
set .@npc$, "[Rare Diamond Merchant]";

View File

@ -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) {

View File

@ -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,{

View File

@ -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;

View File

@ -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]";

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);