Merge branch 'master' into woe_te-restrictions
This commit is contained in:
commit
65a90ff84c
27
db/import-tmpl/job_noenter_map.txt
Normal file
27
db/import-tmpl/job_noenter_map.txt
Normal file
@ -0,0 +1,27 @@
|
||||
// Defines Job(s) that are restricted to enter map (by flag/zones)
|
||||
//
|
||||
// Structure of Database:
|
||||
// JobID,FlagZone,GroupLevelBypass
|
||||
//
|
||||
// JobID: See JOB_* constants or use job number
|
||||
//
|
||||
// Legend for 'Flag' field (bitmask):
|
||||
// 1 - restricted in normal maps
|
||||
// 2 - restricted in PVP
|
||||
// 4 - restricted in GVG
|
||||
// 8 - restricted in Battlegrounds
|
||||
// Restricted zones - configured by 'restricted <number>' mapflag
|
||||
// 32 - restricted in zone 1
|
||||
// 64 - restricted in zone 2
|
||||
// 128 - restricted in zone 3
|
||||
// 256 - restricted in zone 4
|
||||
// 512 - restricted in zone 5
|
||||
// 1024 - restricted in zone 6
|
||||
// 2048 - restricted in zone 7
|
||||
// 4096 - restricted in zone 8
|
||||
//
|
||||
// GroupLevelBypass: Group Level (groups.conf) to ignore the restriction
|
||||
//
|
||||
// NOTES:
|
||||
// - Restriction will be overwritten for multiple defines with the same Job ID
|
||||
// - The flag is used by 'jobcanentermap' script.
|
27
db/pre-re/job_noenter_map.txt
Normal file
27
db/pre-re/job_noenter_map.txt
Normal file
@ -0,0 +1,27 @@
|
||||
// Defines Job(s) that are restricted to enter map (by flag/zones)
|
||||
//
|
||||
// Structure of Database:
|
||||
// JobID,FlagZone,GroupLevelBypass
|
||||
//
|
||||
// JobID: See JOB_* constants or use job number
|
||||
//
|
||||
// Legend for 'Flag' field (bitmask):
|
||||
// 1 - restricted in normal maps
|
||||
// 2 - restricted in PVP
|
||||
// 4 - restricted in GVG
|
||||
// 8 - restricted in Battlegrounds
|
||||
// Restricted zones - configured by 'restricted <number>' mapflag
|
||||
// 32 - restricted in zone 1
|
||||
// 64 - restricted in zone 2
|
||||
// 128 - restricted in zone 3
|
||||
// 256 - restricted in zone 4
|
||||
// 512 - restricted in zone 5
|
||||
// 1024 - restricted in zone 6
|
||||
// 2048 - restricted in zone 7
|
||||
// 4096 - restricted in zone 8
|
||||
//
|
||||
// GroupLevelBypass: Group Level (groups.conf) to ignore the restriction
|
||||
//
|
||||
// NOTES:
|
||||
// - Restriction will be overwritten for multiple defines with the same Job ID
|
||||
// - The flag is used by 'jobcanentermap' script.
|
@ -2751,13 +2751,13 @@
|
||||
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,,,,,{ .@i = getiteminfo(getequipid(EQI_HAND_R),11); if(.@i==W_1HSWORD||.@i==W_2HSWORD) { 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) == W_DAGGER) { .@r = getrefine(); if(.@r>=10) { bonus bAspd,1; } if(.@r>=14) { bonus bAspd,1; } } },{},{}
|
||||
4574,Daehyon_Card,General Daehyon Card,6,20,,10,,,,,,,,2,,,,,{ .@i = getiteminfo(getequipid(EQI_HAND_R),11); if(.@i==W_1HSWORD||.@i==W_2HSWORD) { bonus bBaseAtk,100; } },{},{}
|
||||
4575,Soheon_Card,Armed Guard Soheon Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,10; if(getiteminfo(getequipid(EQI_HAND_R),11) == W_DAGGER) { .@r = getrefine(); if(.@r>=10) { bonus bAspd,1; } if(.@r>=14) { bonus bAspd,1; } } },{},{}
|
||||
4576,Gioia_Card,Gioia Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bMagicAtkEle,Ele_Wind,100; bonus2 bMagicAtkEle,Ele_Ghost,100; bonus2 bSubEle,Ele_All,-30; },{},{}
|
||||
4577,Elvira_Card,Elvira Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bMagicAtkEle,Ele_Wind,20; bonus2 bMagicAtkEle,Ele_Ghost,20; },{},{}
|
||||
4578,Angry_Student_Pyuriel_Card,Angry Student Pyuriel Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,30; bonus2 bSubRace,RC_All,-10; bonus2 bSubRace,RC_Player,10; },{},{}
|
||||
4579,Warrior_Lola_Card,Warrior Lola Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r; },{},{}
|
||||
4580,Dark_Guardian_Kades_Card,Dark Guardian Kades Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-100; },{},{}
|
||||
4578,Pyuriel_Card,Angry Student Pyuriel Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,30; bonus2 bSubRace,RC_All,-10; bonus2 bSubRace,RC_Player,10; },{},{}
|
||||
4579,Lola_Card,Warrior Lola Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r; },{},{}
|
||||
4580,Kades_Card,Dark Guardian Kades Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-100; },{},{}
|
||||
4581,Rudo_Card,Rudo Card,6,20,,10,,,,,,,,64,,,,,{ autobonus "{ sc_start SC_SPEEDUP1,3000,50; bonus bAgi,44; heal 0,-40; }",3,3000,0; },{},{}
|
||||
4582,Bungisngis_Card,Bungisngis Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,(getrefine()/2); },{},{}
|
||||
4583,Engkanto_Card,Engkanto Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bAddEle,Ele_Poison,30; bonus2 bMagicAddEle,Ele_Poison,30; bonus2 bIgnoreDefRaceRate,RC_Plant,30; },{},{}
|
||||
@ -2773,18 +2773,18 @@
|
||||
4593,Menblatt_Card,Menblatt Card,6,20,,10,,,,,,,,4,,,,,{ bonus bLongAtkRate,readparam(bDex)/10; },{},{}
|
||||
4594,Petal_Card,Petal Card,6,20,,10,,,,,,,,4,,,,,{ bonus bCritAtkRate,2*(readparam(bLuk)/10); },{},{}
|
||||
4595,Cenere_Card,Cenere Card,6,20,,10,,,,,,,,4,,,,,{ bonus bAspdRate,2*(readparam(bAgi)/10); },{},{}
|
||||
4596,Antique_Book_Card,Antique Book Card,6,20,,10,,,,,,,,4,,,,,{ bonus bMatk,5*(readparam(bInt)/10); },{},{}
|
||||
4597,Lichtern_Blue_Card,Lichtern Blue Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5; },{},{}
|
||||
4598,Lichtern_Green_Card,Lichtern Green Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5; },{},{}
|
||||
4599,Lichtern_Red_Card,Lichtern Red Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5; },{},{}
|
||||
4600,Lichtern_Yellow_Card,Lichtern Yellow Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5; },{},{}
|
||||
4596,AntiqueBook_Card,Antique Book Card,6,20,,10,,,,,,,,4,,,,,{ bonus bMatk,5*(readparam(bInt)/10); },{},{}
|
||||
4597,LichternB_Card,Lichtern Blue Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5; },{},{}
|
||||
4598,LichternG_Card,Lichtern Green Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5; },{},{}
|
||||
4599,LichternR_Card,Lichtern Red Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5; },{},{}
|
||||
4600,LichternY_Card,Lichtern Yellow Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5; },{},{}
|
||||
4601,Amdarais_Card,Amdarais Card,6,20,,10,,,,,,,,16,,,,,{ bonus bAtkRate,15; bonus bMatkRate,15; bonus2 bHPLossRate,666,4000; bonus2 bSPLossRate,66,4000; },{},{ heal -6666,-666; }
|
||||
4602,Realized_Amdarais_Card,Realized Amdarais Card,6,20,,10,,,,,,,,16,,,,,{ bonus bAtkRate,20; bonus bMatkRate,20; bonus2 bHPLossRate,666,6000; bonus2 bSPLossRate,66,6000; },{},{ heal -6666,-666; }
|
||||
4603,Corruption_Root_Card,Corruption Root Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,20; bonus5 bAutoSpell,"NPC_WIDESTONE",1,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDESLEEP",1,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDECURSE",1,70,BF_WEAPON,0; },{},{}
|
||||
4604,Realized_Corruption_Root_Card,Realized Corruption Root Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus5 bAutoSpell,"NPC_WIDESTONE",2,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDESLEEP",2,70,BF_WEAPON,0; bonus5 bAutoSpell,"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),11) == W_BOOK) { .@r = getrefine(); if(.@r>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(.@r>=14) { bonus bBaseAtk,20; bonus bMatk,20; } } },{},{}
|
||||
4605,UndeadKnightM_Card,Agony Of Royal Knight Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMaxHPrate,-44; bonus bHPGainValue,200+10*getrefine(); },{},{}
|
||||
4606,UndeadKnightF_Card,Grudge of Royal Knight Card,6,20,,10,,,,,,,,4,,,,,{ bonus bMaxSPrate,-44; bonus bSPGainValue,20+(getrefine()/2); },{},{ heal 0,-444; }
|
||||
4607,FaithfulManager_Card,Faithful Manager Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),11) == W_BOOK) { .@r = getrefine(); if(.@r>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(.@r>=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; },{},{}
|
||||
4610,Sarah_Card,Sarah Card,6,10,,10,,,,,,,,16,,,,,{ bonus bAbsorbDmgMaxHP,100; },{},{}
|
||||
|
27
db/re/job_noenter_map.txt
Normal file
27
db/re/job_noenter_map.txt
Normal file
@ -0,0 +1,27 @@
|
||||
// Defines Job(s) that are restricted to enter map (by flag/zones)
|
||||
//
|
||||
// Structure of Database:
|
||||
// JobID,FlagZone,GroupLevelBypass
|
||||
//
|
||||
// JobID: See JOB_* constants or use job number
|
||||
//
|
||||
// Legend for 'Flag' field (bitmask):
|
||||
// 1 - restricted in normal maps
|
||||
// 2 - restricted in PVP
|
||||
// 4 - restricted in GVG
|
||||
// 8 - restricted in Battlegrounds
|
||||
// Restricted zones - configured by 'restricted <number>' mapflag
|
||||
// 32 - restricted in zone 1
|
||||
// 64 - restricted in zone 2
|
||||
// 128 - restricted in zone 3
|
||||
// 256 - restricted in zone 4
|
||||
// 512 - restricted in zone 5
|
||||
// 1024 - restricted in zone 6
|
||||
// 2048 - restricted in zone 7
|
||||
// 4096 - restricted in zone 8
|
||||
//
|
||||
// GroupLevelBypass: Group Level (groups.conf) to ignore the restriction
|
||||
//
|
||||
// NOTES:
|
||||
// - Restriction will be overwritten for multiple defines with the same Job ID
|
||||
// - The flag is used by 'jobcanentermap' script.
|
@ -4298,6 +4298,25 @@ This command will force a stat recalculation for the attached player.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*needed_status_point(<type>,<val>{,<char id>});
|
||||
|
||||
Returns the number of stat points needed to change the specified stat <type> by <val>.
|
||||
If <val> is negative, returns the number of stat points that would be needed to
|
||||
raise the specified stat from (current value - <val>) to current value.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*jobcanentermap("<mapname>"{,<JobID>});
|
||||
|
||||
Return true if player (decided by job) can enter the map, false otherwise.
|
||||
|
||||
For optional 'JobID', see constant of Job_*, or use player's Class, BaseJob,
|
||||
and BaseClass. If no player is attached, this param must have a value.
|
||||
|
||||
See also db/[pre-]re/job_noenter_map.txt
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*get_revision()
|
||||
|
||||
This command will return the SVN revision number that the server is currently
|
||||
@ -5980,11 +5999,13 @@ It is an approximation of official server script language's 'cmdothernpc'.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*npctalk "<message>";
|
||||
*npctalk "<message>"{,"<NPC name>"};
|
||||
|
||||
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 will make everyone in the area see the NPC greet the character
|
||||
// who just invoked it.
|
||||
|
@ -304,3 +304,28 @@ function script F_Snowball {
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
// Status reduction potion
|
||||
//============================================================
|
||||
// - Permanently reduces base stat <type> by <val>.
|
||||
// - Returns status points equals to points needed to raise
|
||||
// that stat to original value.
|
||||
// - Doesn't work if base status <type> would become lower than 1 after reduction.
|
||||
// * callfunc("F_CashReduceStat",<type>{,<val>,<itemid>});
|
||||
function script F_CashReduceStat {
|
||||
.@type = getarg(0);
|
||||
.@amount = getarg(1, -1);
|
||||
.@itemid = getarg(2, 0);
|
||||
|
||||
if((readparam(.@type) + .@amount) < 1) return;
|
||||
|
||||
if(.@itemid) {
|
||||
if(countitem(.@itemid))
|
||||
delitem .@itemid,1;
|
||||
else
|
||||
return;
|
||||
}
|
||||
StatusPoint += needed_status_point(.@type, .@amount);
|
||||
statusup2 .@type,.@amount;
|
||||
return;
|
||||
}
|
||||
|
@ -208,6 +208,8 @@ function script F_Mora_Mist {
|
||||
mapannounce .@map$,getarg(1),bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
|
||||
enablenpc instance_npcname(getarg(0));
|
||||
disablenpc instance_npcname(strnpcinfo(0));
|
||||
if (getarg(4,0))
|
||||
initnpctimer;
|
||||
close;
|
||||
} else
|
||||
mapannounce .@map$,((getarg(3,0))?getarg(2):getarg(2)+"'s Cry: Huh? Who's doing bad things to my tree?!"),bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
|
||||
@ -261,7 +263,8 @@ OnMyMobDead:
|
||||
callfunc "F_Mora_Mist",
|
||||
"a4-2_a11",
|
||||
"Rem's Desperate Cry: Argh... Rem will sleep. Rem will sleep now, and won't wake up forever!",
|
||||
"Rem";
|
||||
"Rem",
|
||||
0,1;
|
||||
end;
|
||||
OnInstanceInit:
|
||||
monster instance_mapname("1@mist"),101,107,"Rem the Gardener",2136,1,instance_npcname("Tired Rem's Garden Tree")+"::OnMyMobDead";
|
||||
@ -355,7 +358,8 @@ OnMyMobDead:
|
||||
callfunc "F_Mora_Mist",
|
||||
"b5_b14",
|
||||
"Depressed Whisper: Now it's all over with the second deepest forest. Gardeners are dying out-",
|
||||
"Spyder";
|
||||
"Spyder",
|
||||
0,1;
|
||||
end;
|
||||
OnInstanceInit:
|
||||
monster instance_mapname("1@mist"),209,200,"Spyder the Eight-Legged",2132,1,instance_npcname("Spyder's Garden Tree")+"::OnMyMobDead";
|
||||
|
@ -2783,13 +2783,13 @@ 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,'.@i = getiteminfo(getequipid(EQI_HAND_R),11); if(.@i==W_1HSWORD||.@i==W_2HSWORD) { 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) == W_DAGGER) { .@r = getrefine(); if(.@r>=10) { bonus bAspd,1; } if(.@r>=14) { bonus bAspd,1; } }',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4574,'Daehyon_Card','General Daehyon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'.@i = getiteminfo(getequipid(EQI_HAND_R),11); if(.@i==W_1HSWORD||.@i==W_2HSWORD) { bonus bBaseAtk,100; }',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4575,'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) == W_DAGGER) { .@r = getrefine(); if(.@r>=10) { bonus bAspd,1; } if(.@r>=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,Ele_Wind,100; bonus2 bMagicAtkEle,Ele_Ghost,100; bonus2 bSubEle,Ele_All,-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,Ele_Wind,20; bonus2 bMagicAtkEle,Ele_Ghost,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,RC_All,-10; bonus2 bSubRace,RC_Player,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),11) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r;',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,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-100;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4578,'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,RC_All,-10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4579,'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) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4580,'Kades_Card','Dark Guardian Kades Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-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,'autobonus "{ sc_start SC_SPEEDUP1,3000,50; bonus bAgi,44; heal 0,-40; }",3,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);
|
||||
REPLACE INTO `item_db_re` VALUES (4583,'Engkanto_Card','Engkanto Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Poison,30; bonus2 bMagicAddEle,Ele_Poison,30; bonus2 bIgnoreDefRaceRate,RC_Plant,30;',NULL,NULL);
|
||||
@ -2805,18 +2805,18 @@ REPLACE INTO `item_db_re` VALUES (4592,'Buwaya_Card','Buwaya Card',6,20,NULL,10,
|
||||
REPLACE INTO `item_db_re` VALUES (4593,'Menblatt_Card','Menblatt Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,readparam(bDex)/10;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4594,'Petal_Card','Petal Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,2*(readparam(bLuk)/10);',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4595,'Cenere_Card','Cenere Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bAspdRate,2*(readparam(bAgi)/10);',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4596,'Antique_Book_Card','Antique Book Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bMatk,5*(readparam(bInt)/10);',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4597,'Lichtern_Blue_Card','Lichtern Blue Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4598,'Lichtern_Green_Card','Lichtern Green Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4599,'Lichtern_Red_Card','Lichtern Red Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4600,'Lichtern_Yellow_Card','Lichtern Yellow Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4596,'AntiqueBook_Card','Antique Book Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bMatk,5*(readparam(bInt)/10);',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4597,'LichternB_Card','Lichtern Blue Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4598,'LichternG_Card','Lichtern Green Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4599,'LichternR_Card','Lichtern Red Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4600,'LichternY_Card','Lichtern Yellow Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5;',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4601,'Amdarais_Card','Amdarais Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bAtkRate,15; bonus bMatkRate,15; bonus2 bHPLossRate,666,4000; bonus2 bSPLossRate,66,4000;',NULL,'heal -6666,-666;');
|
||||
REPLACE INTO `item_db_re` VALUES (4602,'Realized_Amdarais_Card','Realized Amdarais Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bAtkRate,20; bonus bMatkRate,20; bonus2 bHPLossRate,666,6000; bonus2 bSPLossRate,66,6000;',NULL,'heal -6666,-666;');
|
||||
REPLACE INTO `item_db_re` VALUES (4603,'Corruption_Root_Card','Corruption Root Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,20; bonus5 bAutoSpell,"NPC_WIDESTONE",1,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDESLEEP",1,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDECURSE",1,70,BF_WEAPON,0;',NULL,NULL);
|
||||
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 bAutoSpell,"NPC_WIDESTONE",2,70,BF_WEAPON,0; bonus5 bAutoSpell,"NPC_WIDESLEEP",2,70,BF_WEAPON,0; bonus5 bAutoSpell,"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),11) == W_BOOK) { .@r = getrefine(); if(.@r>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(.@r>=14) { bonus bBaseAtk,20; bonus bMatk,20; } }',NULL,NULL);
|
||||
REPLACE INTO `item_db_re` VALUES (4605,'UndeadKnightM_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,'UndeadKnightF_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,'FaithfulManager_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) == W_BOOK) { .@r = getrefine(); if(.@r>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(.@r>=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);
|
||||
REPLACE INTO `item_db_re` VALUES (4610,'Sarah_Card','Sarah Card',6,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bAbsorbDmgMaxHP,100;',NULL,NULL);
|
||||
|
@ -8,7 +8,7 @@ INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 12609, 1, 0 ); -- Old_Ore_Box
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
|
||||
@ -40,7 +40,7 @@ INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 12831, 1, 0 ); -- Potion_Box
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
|
||||
|
||||
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
|
||||
|
@ -402,7 +402,7 @@ struct mmo_charstatus {
|
||||
unsigned int base_exp,job_exp;
|
||||
int zeny;
|
||||
|
||||
short class_;
|
||||
short class_; ///< Player's JobID
|
||||
unsigned int status_point,skill_point;
|
||||
int hp,max_hp,sp,max_sp;
|
||||
unsigned int option;
|
||||
|
@ -475,7 +475,7 @@ ACMD_FUNC(mapmove)
|
||||
if (!map_search_freecell(NULL, m, &x, &y, 10, 10, 1))
|
||||
x = y = 0; //Invalid cell, use random spot.
|
||||
}
|
||||
if (map[m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
|
||||
if ((map[m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) || !pc_job_can_entermap((enum e_job)sd->status.class_, m, sd->group_level)) {
|
||||
clif_displaymessage(fd, msg_txt(sd,247));
|
||||
return -1;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ static struct eri *delay_damage_ers; //For battle delay damage structures.
|
||||
* @param bl
|
||||
* @return skill_id
|
||||
*/
|
||||
int battle_getcurrentskill(struct block_list *bl)
|
||||
uint16 battle_getcurrentskill(struct block_list *bl)
|
||||
{
|
||||
struct unit_data *ud;
|
||||
|
||||
|
@ -110,7 +110,7 @@ struct block_list* battle_get_master(struct block_list *src);
|
||||
struct block_list* battle_gettargeted(struct block_list *target);
|
||||
struct block_list* battle_getenemy(struct block_list *target, int type, int range);
|
||||
int battle_gettarget(struct block_list *bl);
|
||||
int battle_getcurrentskill(struct block_list *bl);
|
||||
uint16 battle_getcurrentskill(struct block_list *bl);
|
||||
|
||||
int battle_check_undead(int race,int element);
|
||||
int battle_check_target(struct block_list *src, struct block_list *target,int flag);
|
||||
|
64
src/map/pc.c
64
src/map/pc.c
@ -113,7 +113,7 @@ struct item_cd {
|
||||
* Converts a class to its array index for CLASS_COUNT defined arrays.
|
||||
* Note that it does not do a validity check for speed purposes, where parsing
|
||||
* player input make sure to use a pcdb_checkid first!
|
||||
* @param class_
|
||||
* @param class_ Job ID see enum e_job
|
||||
* @return Class Index
|
||||
*/
|
||||
int pc_class2idx(int class_) {
|
||||
@ -11117,6 +11117,31 @@ static bool pc_readdb_job_param(char* fields[], int columns, int current)
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read job_noenter_map.txt
|
||||
**/
|
||||
static bool pc_readdb_job_noenter_map(char *str[], int columns, int current) {
|
||||
int idx, class_ = -1;
|
||||
|
||||
if (ISDIGIT(str[0][0])) {
|
||||
class_ = atoi(str[0]);
|
||||
} else {
|
||||
if (!script_get_constant(str[0], &class_)) {
|
||||
ShowError("pc_readdb_job_noenter_map: Invalid job %s specified.\n", str[0]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pcdb_checkid(class_) || (idx = pc_class2idx(class_)) < 0) {
|
||||
ShowError("pc_readdb_job_noenter_map: Invalid job %d specified.\n", str[0]);
|
||||
return false;
|
||||
}
|
||||
|
||||
job_info[idx].noenter_map.zone = atoi(str[1]);
|
||||
job_info[idx].noenter_map.group_lv = atoi(str[2]);
|
||||
return true;
|
||||
}
|
||||
|
||||
static int pc_read_statsdb(const char *basedir, int last_s, bool silent){
|
||||
int i=1;
|
||||
char line[24000]; //FIXME this seem too big
|
||||
@ -11220,6 +11245,7 @@ void pc_readdb(void) {
|
||||
sv_readdb(dbsubpath2, "job_basehpsp_db.txt", ',', 4, 4+500, CLASS_COUNT*2, &pc_readdb_job_basehpsp, i); //Make it support until lvl 500!
|
||||
#endif
|
||||
sv_readdb(dbsubpath2, "job_param_db.txt", ',', 2, PARAM_MAX+1, CLASS_COUNT, &pc_readdb_job_param, i);
|
||||
sv_readdb(dbsubpath2, "job_noenter_map.txt", ',', 3, 3, CLASS_COUNT, &pc_readdb_job_noenter_map, i);
|
||||
aFree(dbsubpath1);
|
||||
aFree(dbsubpath2);
|
||||
}
|
||||
@ -12178,20 +12204,36 @@ void pc_show_questinfo_reinit(struct map_session_data *sd) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if player can participate in WOE:TE
|
||||
* @param mapid Player's class @see enum e_mapid
|
||||
* @return True:If allowed, False:Doesn't
|
||||
* Check if a job is allowed to enter the map
|
||||
* @param jobid Job ID see enum e_job or sd->status.class_
|
||||
* @param m ID -an index- for direct indexing map[] array
|
||||
* @return 1 if job is allowed, 0 otherwise
|
||||
**/
|
||||
bool pc_canParticipateSiegeTE(uint32 mapid) {
|
||||
bool pc_job_can_entermap(enum e_job jobid, int m, int group_lv) {
|
||||
uint16 idx = 0;
|
||||
|
||||
if (mapid&JOBL_THIRD)
|
||||
// Map is other map server.
|
||||
// !FIXME: Currently, a map-server doesn't recognized map's attributes on other server, so we assume it's fine to warp.
|
||||
if (m < 0)
|
||||
return true;
|
||||
|
||||
if (m >= MAX_MAP_PER_SERVER || !map[m].cell)
|
||||
return false;
|
||||
|
||||
switch (mapid) {
|
||||
case MAPID_REBELLION:
|
||||
case MAPID_KAGEROUOBORO:
|
||||
return false;
|
||||
}
|
||||
if (!pcdb_checkid(jobid))
|
||||
return false;
|
||||
|
||||
idx = pc_class2idx(jobid);
|
||||
if (!job_info[idx].noenter_map.zone || group_lv > job_info[idx].noenter_map.group_lv)
|
||||
return true;
|
||||
|
||||
if ((!map_flag_vs(m) && job_info[idx].noenter_map.zone&1) || // Normal
|
||||
(map[m].flag.pvp && job_info[idx].noenter_map.zone&2) || // PVP
|
||||
(map_flag_gvg2(m) && job_info[idx].noenter_map.zone&4) || // GVG
|
||||
(map[m].flag.battleground && job_info[idx].noenter_map.zone&8) || // Battleground
|
||||
(map[m].flag.restricted && job_info[idx].noenter_map.zone&(8*map[m].zone)) // Zone restriction
|
||||
)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -796,6 +796,10 @@ struct {
|
||||
struct s_params {
|
||||
uint16 str, agi, vit, int_, dex, luk;
|
||||
} max_param;
|
||||
struct s_job_noenter_map {
|
||||
uint32 zone;
|
||||
uint8 group_lv;
|
||||
} noenter_map;
|
||||
} job_info[CLASS_COUNT];
|
||||
|
||||
#define EQP_WEAPON EQP_HAND_R
|
||||
@ -1262,7 +1266,7 @@ void pc_validate_skill(struct map_session_data *sd);
|
||||
void pc_show_questinfo(struct map_session_data *sd);
|
||||
void pc_show_questinfo_reinit(struct map_session_data *sd);
|
||||
|
||||
bool pc_canParticipateSiegeTE(uint32 mapid);
|
||||
bool pc_job_can_entermap(enum e_job jobid, int m, int group_lv);
|
||||
|
||||
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
|
||||
int pc_level_penalty_mod(int level_diff, uint32 mob_class, enum e_mode mode, int type);
|
||||
|
@ -244,7 +244,7 @@ void quest_update_objective(TBL_PC *sd, int mob_id)
|
||||
for( i = 0; i < sd->avail_quests; i++ ) {
|
||||
struct quest_db *qi = NULL;
|
||||
|
||||
if( sd->quest_log[i].state != Q_ACTIVE ) // Skip inactive quests
|
||||
if( sd->quest_log[i].state == Q_COMPLETE ) // Skip complete quests
|
||||
continue;
|
||||
|
||||
qi = quest_search(sd->quest_log[i].quest_id);
|
||||
@ -356,6 +356,8 @@ int quest_check(TBL_PC *sd, int quest_id, enum quest_check_type type)
|
||||
|
||||
switch( type ) {
|
||||
case HAVEQUEST:
|
||||
if (sd->quest_log[i].state == Q_INACTIVE) // Player has the quest but it's in the inactive state; send it as Q_ACTIVE.
|
||||
return 1;
|
||||
return sd->quest_log[i].state;
|
||||
case PLAYTIME:
|
||||
return (sd->quest_log[i].time < (unsigned int)time(NULL) ? 2 : sd->quest_log[i].state == Q_COMPLETE ? 1 : 0);
|
||||
|
109
src/map/script.c
109
src/map/script.c
@ -5635,7 +5635,7 @@ BUILDIN_FUNC(warpparty)
|
||||
TBL_PC *pl_sd;
|
||||
struct party_data* p;
|
||||
int type;
|
||||
int mapindex;
|
||||
int mapindex = 0, m = -1;
|
||||
int i;
|
||||
|
||||
const char* str = script_getstr(st,2);
|
||||
@ -5664,18 +5664,21 @@ BUILDIN_FUNC(warpparty)
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
pl_sd = p->data[i].sd;
|
||||
mapindex = pl_sd->mapindex;
|
||||
m = map_mapindex2mapid(mapindex);
|
||||
x = pl_sd->bl.x;
|
||||
y = pl_sd->bl.y;
|
||||
break;
|
||||
case 4:
|
||||
mapindex = mapindex_name2id(str);
|
||||
if (!mapindex) {// Invalid map
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
m = map_mapindex2mapid(mapindex);
|
||||
break;
|
||||
case 2:
|
||||
//"SavePoint" uses save point of the currently attached player
|
||||
if (( sd = script_rid2sd(st) ) == NULL )
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
default:
|
||||
mapindex = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -5706,7 +5709,7 @@ BUILDIN_FUNC(warpparty)
|
||||
break;
|
||||
case 3: // Leader
|
||||
case 4: // m,x,y
|
||||
if(!map[pl_sd->bl.m].flag.noreturn && !map[pl_sd->bl.m].flag.nowarp)
|
||||
if(!map[pl_sd->bl.m].flag.noreturn && !map[pl_sd->bl.m].flag.nowarp && pc_job_can_entermap((enum e_job)pl_sd->status.class_, m, pl_sd->group_level))
|
||||
pc_setpos(pl_sd,mapindex,x,y,CLR_TELEPORT);
|
||||
break;
|
||||
}
|
||||
@ -5725,7 +5728,7 @@ BUILDIN_FUNC(warpguild)
|
||||
TBL_PC *pl_sd;
|
||||
struct guild* g;
|
||||
struct s_mapiterator* iter;
|
||||
int type;
|
||||
int type, mapindex = 0, m = -1;
|
||||
|
||||
const char* str = script_getstr(st,2);
|
||||
int x = script_getnum(st,3);
|
||||
@ -5746,6 +5749,15 @@ BUILDIN_FUNC(warpguild)
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case 3:
|
||||
mapindex = mapindex_name2id(str);
|
||||
if (!mapindex)
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
m = map_mapindex2mapid(mapindex);
|
||||
break;
|
||||
}
|
||||
|
||||
iter = mapit_getallusers();
|
||||
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
|
||||
{
|
||||
@ -5767,8 +5779,8 @@ BUILDIN_FUNC(warpguild)
|
||||
pc_setpos(pl_sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT);
|
||||
break;
|
||||
case 3: // m,x,y
|
||||
if(!map[pl_sd->bl.m].flag.noreturn && !map[pl_sd->bl.m].flag.nowarp)
|
||||
pc_setpos(pl_sd,mapindex_name2id(str),x,y,CLR_TELEPORT);
|
||||
if(!map[pl_sd->bl.m].flag.noreturn && !map[pl_sd->bl.m].flag.nowarp && pc_job_can_entermap((enum e_job)pl_sd->status.class_, m, pl_sd->group_level))
|
||||
pc_setpos(pl_sd,mapindex,x,y,CLR_TELEPORT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -14409,10 +14421,14 @@ BUILDIN_FUNC(message)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(npctalk)
|
||||
{
|
||||
struct npc_data* nd = (struct npc_data *)map_id2bl(st->oid);
|
||||
struct npc_data* nd = NULL;
|
||||
const char* str = script_getstr(st,2);
|
||||
|
||||
if (nd) {
|
||||
if (script_hasdata(st, 3))
|
||||
nd = npc_name2id(script_getstr(st, 3));
|
||||
else
|
||||
nd = (struct npc_data *)map_id2bl(st->oid);
|
||||
if (nd != NULL) {
|
||||
char message[256];
|
||||
safesnprintf(message, sizeof(message), "%s", str);
|
||||
clif_disp_overhead(&nd->bl, message);
|
||||
@ -21791,6 +21807,59 @@ BUILDIN_FUNC(setrandomoption) {
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
/// Returns the number of stat points needed to change the specified stat by val.
|
||||
/// If val is negative, returns the number of stat points that would be needed to
|
||||
/// raise the specified stat from (current value - val) to current value.
|
||||
/// *needed_status_point(<type>,<val>{,<char id>});
|
||||
/// @author [secretdataz]
|
||||
BUILDIN_FUNC(needed_status_point) {
|
||||
struct map_session_data *sd;
|
||||
int type, val;
|
||||
if (!script_charid2sd(4, sd))
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
type = script_getnum(st, 2);
|
||||
val = script_getnum(st, 3);
|
||||
|
||||
script_pushint(st, pc_need_status_point(sd, type, val));
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* jobcanentermap("<mapname>"{,<JobID>});
|
||||
* Check if (player with) JobID can enter the map.
|
||||
* @param mapname Map name
|
||||
* @param JobID Player's JobID (optional)
|
||||
**/
|
||||
BUILDIN_FUNC(jobcanentermap) {
|
||||
const char *mapname = script_getstr(st, 2);
|
||||
int mapidx = mapindex_name2id(mapname), m = -1;
|
||||
int jobid = 0;
|
||||
TBL_PC *sd = NULL;
|
||||
|
||||
if (!mapidx) {// Invalid map
|
||||
script_pushint(st, false);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
m = map_mapindex2mapid(mapidx);
|
||||
if (m == -1) { // Map is on different map server
|
||||
ShowError("buildin_jobcanentermap: Map '%s' is not found in this server.\n", mapname);
|
||||
script_pushint(st, false);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
if (script_hasdata(st, 3)) {
|
||||
jobid = script_getnum(st, 3);
|
||||
} else {
|
||||
if (!(sd = script_rid2sd(st))) {
|
||||
script_pushint(st, false);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
jobid = sd->status.class_;
|
||||
}
|
||||
|
||||
script_pushint(st, pc_job_can_entermap((enum e_job)jobid, m, sd ? sd->group_level : 0));
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return alliance information between the two guilds.
|
||||
@ -21848,23 +21917,6 @@ BUILDIN_FUNC(getguildalliance)
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* getpermissionwoete([<char_id>]);
|
||||
* Check if player can participate in WOE:TE
|
||||
* @param char_id Player's CharID (optional)
|
||||
**/
|
||||
BUILDIN_FUNC(getpermissionwoete) {
|
||||
TBL_PC *sd = NULL;
|
||||
|
||||
if (!script_charid2sd(2, sd)) {
|
||||
script_pushint(st, 0);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
script_pushint(st, pc_canParticipateSiegeTE(sd->class_) ? 1 : 0);
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
#include "../custom/script.inc"
|
||||
|
||||
// declarations that were supposed to be exported from npc_chat.c
|
||||
@ -22169,7 +22221,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(mobcount,"ss"),
|
||||
BUILDIN_DEF(getlook,"i?"),
|
||||
BUILDIN_DEF(getsavepoint,"i?"),
|
||||
@ -22448,6 +22500,8 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(getrandomoptinfo, "i"),
|
||||
BUILDIN_DEF(getequiprandomoption, "iii?"),
|
||||
BUILDIN_DEF(setrandomoption,"iiiii?"),
|
||||
BUILDIN_DEF(needed_status_point,"ii?"),
|
||||
BUILDIN_DEF(jobcanentermap,"s?"),
|
||||
|
||||
// WoE TE
|
||||
BUILDIN_DEF(agitstart3,""),
|
||||
@ -22455,7 +22509,6 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(agitcheck3,""),
|
||||
BUILDIN_DEF(gvgon3,"s"),
|
||||
BUILDIN_DEF(gvgoff3,"s"),
|
||||
BUILDIN_DEF(getpermissionwoete,"?"),
|
||||
|
||||
#include "../custom/script_def.inc"
|
||||
|
||||
|
@ -460,9 +460,9 @@
|
||||
script_set_constant("CharRename",SP_CHARRENAME,true);
|
||||
script_set_constant("Font",SP_CHARFONT,true);
|
||||
script_set_constant("BankVault",SP_BANK_VAULT,true);
|
||||
script_set_constant("RouletteBronze",SP_ROULETTE_BRONZE,true);
|
||||
script_set_constant("RouletteSilver",SP_ROULETTE_SILVER,true);
|
||||
script_set_constant("RouletteGold",SP_ROULETTE_GOLD,true);
|
||||
script_set_constant(ROULETTE_BRONZE_VAR,SP_ROULETTE_BRONZE,true);
|
||||
script_set_constant(ROULETTE_SILVER_VAR,SP_ROULETTE_SILVER,true);
|
||||
script_set_constant(ROULETTE_GOLD_VAR,SP_ROULETTE_GOLD,true);
|
||||
|
||||
script_set_constant("bMaxHP",SP_MAXHP,false);
|
||||
script_set_constant("bMaxSP",SP_MAXSP,false);
|
||||
|
@ -8589,8 +8589,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
int8 dy[9] = { 0, 0, 1,-1, 1,-1,-1, 1, 0};
|
||||
uint8 j = 0, calls = 0, called = 0;
|
||||
struct guild *g;
|
||||
bool is_te_castle = map_flag_gvg2_te(src->m);
|
||||
|
||||
// i don't know if it actually summons in a circle, but oh well. ;P
|
||||
g = sd?sd->guild:guild_search(status_get_guild_id(src));
|
||||
if (!g)
|
||||
@ -8611,7 +8609,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) {
|
||||
if (map[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
|
||||
continue;
|
||||
if (is_te_castle && !pc_canParticipateSiegeTE(dstsd->class_))
|
||||
if (!pc_job_can_entermap((enum e_job)dstsd->status.class_, src->m, dstsd->group_level))
|
||||
continue;
|
||||
if(map_getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH))
|
||||
dx[j] = dy[j] = 0;
|
||||
@ -13151,7 +13149,8 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, un
|
||||
|
||||
sg->val1 = (count<<16)|working;
|
||||
|
||||
pc_setpos(sd,m,x,y,CLR_TELEPORT);
|
||||
if (pc_job_can_entermap((enum e_job)sd->status.class_, map_mapindex2mapid(m), sd->group_level))
|
||||
pc_setpos(sd,m,x,y,CLR_TELEPORT);
|
||||
}
|
||||
} else if(bl->type == BL_MOB && battle_config.mob_warp&2) {
|
||||
int16 m = map_mapindex2mapid(sg->val3);
|
||||
@ -18132,13 +18131,13 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
|
||||
if(group->val1) {
|
||||
sd = map_charid2sd(group->val1);
|
||||
group->val1 = 0;
|
||||
if (sd && !map[sd->bl.m].flag.nowarp)
|
||||
if (sd && !map[sd->bl.m].flag.nowarp && pc_job_can_entermap((enum e_job)sd->status.class_, unit->bl.m, sd->group_level))
|
||||
pc_setpos(sd,map_id2index(unit->bl.m),unit->bl.x,unit->bl.y,CLR_TELEPORT);
|
||||
}
|
||||
if(group->val2) {
|
||||
sd = map_charid2sd(group->val2);
|
||||
group->val2 = 0;
|
||||
if (sd && !map[sd->bl.m].flag.nowarp)
|
||||
if (sd && !map[sd->bl.m].flag.nowarp && pc_job_can_entermap((enum e_job)sd->status.class_, unit->bl.m, sd->group_level))
|
||||
pc_setpos(sd,map_id2index(unit->bl.m),unit->bl.x,unit->bl.y,CLR_TELEPORT);
|
||||
}
|
||||
skill_delunit(unit);
|
||||
|
@ -319,11 +319,13 @@
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_nouse.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_nouse.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_stack.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_stack.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_trade.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_trade.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_randomopt_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_randomopt_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_basehpsp_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_basehpsp_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db1.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db1.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db2.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db2.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_exp.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_exp.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_param_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_param_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_noenter_map.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_noenter_map.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\level_penalty.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\level_penalty.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\magicmushroom_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\magicmushroom_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\map_cache.dat" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_cache.dat')" />
|
||||
|
@ -323,11 +323,13 @@
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_nouse.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_nouse.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_stack.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_stack.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_trade.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_trade.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_randomopt_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_randomopt_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_basehpsp_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_basehpsp_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db1.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db1.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db2.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db2.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_exp.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_exp.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_param_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_param_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_noenter_map.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_noenter_map.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\level_penalty.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\level_penalty.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\magicmushroom_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\magicmushroom_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\map_cache.dat" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_cache.dat')" />
|
||||
|
@ -323,11 +323,13 @@
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_nouse.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_nouse.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_stack.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_stack.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_trade.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_trade.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_randomopt_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_randomopt_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_basehpsp_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_basehpsp_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db1.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db1.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db2.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db2.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_exp.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_exp.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_param_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_param_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_noenter_map.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_noenter_map.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\level_penalty.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\level_penalty.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\magicmushroom_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\magicmushroom_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\map_cache.dat" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_cache.dat')" />
|
||||
|
@ -321,11 +321,13 @@
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_nouse.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_nouse.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_stack.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_stack.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_trade.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_trade.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\item_randomopt_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_randomopt_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_basehpsp_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_basehpsp_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db1.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db1.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_db2.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db2.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_exp.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_exp.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_param_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_param_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\job_noenter_map.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_noenter_map.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\level_penalty.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\level_penalty.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\magicmushroom_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\magicmushroom_db.txt')" />
|
||||
<Copy SourceFiles="..\db\import-tmpl\map_cache.dat" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_cache.dat')" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user