Moved some remaining constants into src (#2501)

* Moved all npc view constants into src

Source side the constants will use Gravity's naming standard(JT_*)
NPC side still supports the old names without JT_

* Moved all effect constants into src

Added check for effect validation to atcommand effect and all script commands using them
Removed the unused and broken function unit_changeviewsize from unit.c
Replaced a lot of hardcoded effect ids with their respective constants
Cleaned up the effect documentations

* Moved all hat effect constants into src

Added check for effect validation to script command hateffect
This commit is contained in:
Lemongrass3110 2017-10-14 18:13:51 +02:00 committed by GitHub
parent 951ff55573
commit f42c2ff211
25 changed files with 4455 additions and 2313 deletions

View File

@ -1621,7 +1621,8 @@
1475: ---- My Channels ----
1476: You have not joined any channels.
//1477 free
// @effect
1477: Please enter a valid effect id in the range from %d to %d.
// @partysharelvl
1478: Party share level range has been changed successfully.

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
//===== By: ==================================================
//= rAthena Dev Team
//===== Last Updated: ========================================
//= 20160313
//= 20171011
//===== Description: =========================================
//= List of available atcommands and their functions.
//============================================================
@ -226,14 +226,24 @@ New warp NPC 'my_warp_sample' created.
@effect <effect ID>
Creates a visual effect on or around the character.
A list of IDs can be found in '/db/const.txt'.
Descriptions of the effects can be found in '/doc/effect_list.txt'.
A list of IDs and descriptions of the effects can be found in '/doc/effect_list.txt'.
---------------------------------------
@misceffect
@misceffect <effect ID>
Does some visual effect on the character (more info needed).
Does some visual effect on the character.
Possible effect IDs:
0 = base level up
1 = job level up
2 = refine failure
3 = refine success
4 = game over
5 = pharmacy success
6 = pharmacy failure
7 = base level up (super novice)
8 = job level up (super novice)
9 = base level up (taekwon)
---------------------------------------

View File

@ -3,7 +3,7 @@
//===== By: ==================================================
//= rAthena Dev Team
//===== Last Updated: ========================================
//= 20120822
//= 20171011
//===== Description: =========================================
//= A list of client-side effects sorted by ID.
//============================================================
@ -11,7 +11,7 @@
The following is a compiled list of visual and sound effects which the client
can produce when receiving a packet with id 0x1f3 (01f3 <ID>.l <type>.l).
Each list entry contains a number and a short description of the effect.
You can produce these effects ingame by doing "@effect <number> 22" (22=self).
You can produce these effects ingame by doing "@effect <number>".
It's also possible to attach effects to item/npc scripts by using 'misceffect'.
Number Description

View File

@ -3,7 +3,7 @@
//===== By:==================================================
//= rAthena Dev Team
//===== Last Updated:========================================
//= 20161206
//= 20171011
//===== Description:=========================================
//= A reference manual for the rAthena scripting language.
//= Commands are sorted depending on their functionality.
@ -7343,7 +7343,7 @@ Example:
bindatcmd "test",strnpcinfo(3) + "::OnAtcommand";
end;
OnAtcommand:
specialeffect2 338;
specialeffect2 EF_ANGEL2;
end;
}
@ -9577,7 +9577,8 @@ solution rather than sending the map and the monster_id.
This will set a Hat Effect onto the player. The state field allows you to
enable (true) or disable (false) the effect on the player.
The Hat Effect constants can be found in db/const.txt starting with HAT_EF_*.
The Hat Effect constants can be found in 'src/map/script_constants.h' starting
with HAT_EF_*.
Requires client 2015-05-13aRagEXE or newer.

View File

@ -62,9 +62,9 @@ M_INFO:
OnInit:
//559,Hand-made_Chocolate
setitemscript 559,"{ itemheal 50,50; if(Sex==SEX_FEMALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect 113; }";
setitemscript 559,"{ itemheal 50,50; if(Sex==SEX_FEMALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect EF_MAGNUS; }";
//560,Hand-made_White_Chocolate
setitemscript 560,"{ itemheal 50,50; if(Sex==SEX_MALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect 113; }";
setitemscript 560,"{ itemheal 50,50; if(Sex==SEX_MALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect EF_MAGNUS; }";
//2634,Wedding_Ring_M,Wedding Ring,5,,10,0,,0,,0,127918079,7,1,136,,0,0,0,{ skill 334,1; skill 335,1; skill 336,1; }
setitemscript 2634,"{ skill 334,1; skill 335,1; skill 336,1; if(@dsv == gettime(DT_HOUR)+1 && ispartneron()){ bonus2 bExpAddRace,5,50; bonus2 bExpAddRace,6,50; bonus2 bExpAddRace,7,50; bonus2 bExpAddRace,8,50; bonus2 bExpAddRace,1,50; } }";

View File

@ -91,7 +91,7 @@ M_QUEST:
OnInit:
//Santa's Hat
setitemscript 2236,"{ bonus bMdef,1; bonus bLuk,1; if(isequipped(2636,2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 410; end;} if(isequipped(2636)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 72;} if(isequipped(2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 338;}}";
setitemscript 2236,"{ bonus bMdef,1; bonus bLuk,1; if(isequipped(2636,2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_RAINBOW; end;} if(isequipped(2636)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_SPHERE;} if(isequipped(2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_ANGEL2;}}";
//Gold Xmas Ring
setitemscript 2636,"{ bonus bLoseSPWhenUnequip,30; if(isequipped(2236)==0)end; if(getskilllv(\"AL_HEAL\")){skill \"TF_HIDING\",4+isequipped(2637);}else{skill \"AL_HEAL\",1+4*isequipped(2637);} }";
//Silver Xmas Ring

View File

@ -183,12 +183,13 @@ OnTimer2500:
.@r = rand(0,1);
if (.@r != 0 ) { stopnpctimer; initnpctimer; end; }
stopnpctimer;
specialeffect .effects[rand(0,18)],AREA,instance_npcname(strnpcinfo(0));
specialeffect .effects[rand(getarraysize(.effects))],AREA,instance_npcname(strnpcinfo(0));
initnpctimer;
end;
OnInit:
setarray .effects,97,255,28,256,29,257,244,92,32,195,258,22,62,234,89,30,225,116,94;
setarray .effects[0],EF_FIREPILLARBOMB,EF_FLAMELAUNCHER,EF_FROSTDIVER2,EF_FROSTWEAPON,EF_LIGHTBOLT,EF_LIGHTNINGLOADER,EF_MAGICROD,EF_METEORSTORM,EF_NAPALMBEAT;
setarray .effects[9],EF_PETRIFYATTACK,EF_SEISMICWEAPON,EF_SIGHT,EF_SIGHTRASHER,EF_SPELLBREAKER,EF_STORMGUST,EF_THUNDERSTORM,EF_VOLCANO,EF_WATERBALL,EF_YUFITELHIT;
hideonnpc strnpcinfo(0);
end;
@ -2289,7 +2290,7 @@ OnEnd:
mes "Enjoy.";
mes "Good luck on the next round!";
percentheal 100,100;
specialeffect2 312;
specialeffect2 EF_HEAL;
close2;
hideonnpc instance_npcname("Tournament Healer#1"); // 83649
end;
@ -2303,13 +2304,13 @@ end;
OnStart:
initnpctimer;
for ( .@i = 11; .@i <= 20; .@i++ ) {
specialeffect .effect[rand(3)], AREA, instance_npcname("#fireworks_" +.@i);
specialeffect .effect[getarraysize(.effect)], AREA, instance_npcname("#fireworks_" +.@i);
}
end;
OnTimer6000:
initnpctimer;
for ( .@i = 0; .@i < 5; .@i++) {
specialeffect .effect[rand(3)], AREA, instance_npcname("#fireworks_" + rand(11,20));
specialeffect .effect[getarraysize(.effect)], AREA, instance_npcname("#fireworks_" + rand(11,20));
}
end;
@ -2319,23 +2320,23 @@ OnTurn:
OnWin:
for ( .@i = 1; .@i <= 5; .@i++ ) {
specialeffect 90, AREA, instance_npcname("#fireworks_f" + .@i);
specialeffect EF_LORD, AREA, instance_npcname("#fireworks_f" + .@i);
}
sleep 3000;
for ( .@i = 1; .@i <= 5; .@i++ ) {
specialeffect 62, AREA, instance_npcname("#fireworks_f" + .@i);
specialeffect EF_SIGHTRASHER, AREA, instance_npcname("#fireworks_f" + .@i);
}
sleep 500;
for ( .@i = 1; .@i <= 5; .@i++ ){
specialeffect 89, AREA, instance_npcname("#fireworks_f" + .@i);
specialeffect EF_STORMGUST, AREA, instance_npcname("#fireworks_f" + .@i);
}
sleep 3000;
for ( .@i = 1; .@i <= 5; .@i++ ) {
specialeffect 237, AREA, instance_npcname("#fireworks_f" + .@i);
specialeffect EF_VIOLENTGALE, AREA, instance_npcname("#fireworks_f" + .@i);
}
end;
OnInstanceInit:
setarray .effect, 30, 89, 92;
setarray .effect, EF_THUNDERSTORM, EF_STORMGUST, EF_METEORSTORM;
end;
}
@ -4098,9 +4099,9 @@ OnTimer1000:
switch('gmt_timer_evt1) {
case 1:
specialeffect 220, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 220, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 220, AREA, instance_npcname("Geffen Gangster#3");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#1");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#2");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#3");
npctalk "Geffen Gangster : You're pretty good...!", instance_npcname("Geffen Gangster#1");
npctalk "Geffen Gangster : We should stop playing around...", instance_npcname("Geffen Gangster#2");
npctalk "Geffen Gangster : You're gonna pay the price!", instance_npcname("Geffen Gangster#3");
@ -4112,7 +4113,7 @@ OnTimer1000:
break;
case 8: npctalk "Iris : That's enough.", instance_npcname("Iris#Gef1"); break;
case 11: npctalk "Iris : I won't forgive you~!", instance_npcname("Iris#Gef1"); break;
case 13: specialeffect 204, AREA, instance_npcname("Iris#Gef1"); break;
case 13: specialeffect EF_POTION1, AREA, instance_npcname("Iris#Gef1"); break;
case 14:
npctalk "Geffen Gangster : Why hello there, are you scared?", instance_npcname("Geffen Gangster#1");
npctalk "Geffen Gangster : You're pretty cute. Do you want to play with us too?", instance_npcname("Geffen Gangster#2");
@ -4128,23 +4129,23 @@ OnTimer1000:
break;
case 22: mapannounce instance_mapname("1@gef"), "Stop right there! Jerks!", 0x00ebff; break;
case 23: hideoffnpc instance_npcname("Chaos#Gef1"); break;
case 25: specialeffect 218, AREA, instance_npcname("Chaos#Gef1"); break;
case 25: specialeffect EF_POTION_CON, AREA, instance_npcname("Chaos#Gef1"); break;
case 26: npctalk "Chaos : Are you clowns harassing Iris?", instance_npcname("Chaos#Gef1"); break;
case 30: npctalk "Chaos : I think I need to teach someone a lesson!", instance_npcname("Chaos#Gef1"); break;
case 31:
specialeffect 60, AREA, instance_npcname("Geffen Gangster#11");
specialeffect 60, AREA, instance_npcname("Geffen Gangster#22");
specialeffect 60, AREA, instance_npcname("Geffen Gangster#33");
specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#11");
specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#22");
specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#33");
npctalk "Chaos : Come and fight me!", instance_npcname("Chaos#Gef2");
hideonnpc instance_npcname("Chaos#Gef1");
hideoffnpc instance_npcname("Chaos#Gef2");
break;
case 34:
npctalk "Chaos : Bash~!!!", instance_npcname("Chaos#Gef2");
specialeffect 1, AREA, instance_npcname("Chaos#Gef2");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#11");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#22");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#33");
specialeffect EF_HIT2, AREA, instance_npcname("Chaos#Gef2");
specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#11");
specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#22");
specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#33");
hideonnpc instance_npcname("Geffen Gangster#11");
hideonnpc instance_npcname("Geffen Gangster#22");
hideonnpc instance_npcname("Geffen Gangster#33");
@ -4165,14 +4166,14 @@ OnTimer1000:
break;
case 42:
npctalk "Chaos : I'm not done yet!! Magnum Break~!", instance_npcname("Chaos#3");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#3");
specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#1");
specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#2");
specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#3");
break;
case 43:
specialeffect 183, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 183, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 183, AREA, instance_npcname("Geffen Gangster#3");
specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#1");
specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#2");
specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#3");
hideonnpc instance_npcname("Geffen Gangster#1");
hideonnpc instance_npcname("Geffen Gangster#2");
hideonnpc instance_npcname("Geffen Gangster#3");
@ -4314,7 +4315,7 @@ OnTimer1000:
case 9:
unittalk 'gmt_account_id, "I have to help!";
attachrid 'gmt_account_id;
specialeffect2 60;
specialeffect2 EF_LOCKON;
detachrid;
monster instance_mapname("1@gef"), 75, 172, "Geffen Bully", 2567, 1, instance_npcname("#Event 2 start 2") + "::OnMobKilled";
monster instance_mapname("1@gef"), 76, 170, "Geffen Bully", 2567, 1, instance_npcname("#Event 2 start 2") + "::OnMobKilled";
@ -4338,9 +4339,9 @@ OnMobKilled:
//completequest 9286;
//setquest 9287;
sleep2 500;
specialeffect 220, AREA, instance_npcname("Geffen Bully#1");
specialeffect 220, AREA, instance_npcname("Geffen Bully#2");
specialeffect 220, AREA, instance_npcname("Geffen Bully#3");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#1");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#2");
specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#3");
$gmt_timer_evt2 = -1;
@ -4364,7 +4365,7 @@ OnMobKilled:
case 10: npctalk "Fenrir : This is really uncomfortable. I can't just sit back and watch.", instance_npcname("Fenrir#1"); break;
case 13:
npctalk "Fenrir : Stop harassing her. I won't forgive you.", instance_npcname("Fenrir#1");
specialeffect 204, AREA, instance_npcname("Fenrir#1");
specialeffect EF_POTION1, AREA, instance_npcname("Fenrir#1");
break;
case 15: npctalk "Geffen Bully : Hey~ You look rich, you must have a lot of zeny right?", instance_npcname("Geffen Bully#1"); break;
case 17: npctalk "Geffen Bully : What's a rich girl like you doing around here?~", instance_npcname("Geffen Bully#2"); break;
@ -4384,16 +4385,16 @@ OnMobKilled:
case 25:
hideoffnpc instance_npcname("Loki#1");
sleep2 500;
specialeffect 126, AREA, instance_npcname("Loki#1");
specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#1");
sleep2 1500;
specialeffect 121, AREA, instance_npcname("Loki#1");
specialeffect EF_SONICBLOW, AREA, instance_npcname("Loki#1");
npctalk "Loki : Hmph!", instance_npcname("Loki#1");
sleep2 500;
specialeffect 124, AREA, instance_npcname("Loki#1");
specialeffect 122, AREA, instance_npcname("Geffen Bully#33");
specialeffect 143, AREA, instance_npcname("Geffen Bully#33");
specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#1");
specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#33");
specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#33");
sleep2 330;
specialeffect 32, AREA, instance_npcname("Geffen Bully#33");
specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#33");
hideonnpc instance_npcname("Geffen Bully#33");
hideoffnpc instance_npcname("Geffen Bully#3");
break;
@ -4404,11 +4405,11 @@ OnMobKilled:
sleep2 750;
npctalk "Loki : Take this.", instance_npcname("Loki#2");
sleep2 500;
specialeffect 271, AREA, instance_npcname("Geffen Bully#22");
specialeffect 122, AREA, instance_npcname("Geffen Bully#22");
specialeffect 143, AREA, instance_npcname("Geffen Bully#22");
specialeffect EF_STRIPARMOR, AREA, instance_npcname("Geffen Bully#22");
specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#22");
specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#22");
sleep2 330;
specialeffect 32, AREA, instance_npcname("Geffen Bully#22");
specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#22");
hideonnpc instance_npcname("Geffen Bully#22");
hideoffnpc instance_npcname("Geffen Bully#2");
break;
@ -4419,11 +4420,11 @@ OnMobKilled:
sleep2 750;
npctalk "Loki : Change your mind yet?", instance_npcname("Loki#3");
sleep2 500;
specialeffect 270, AREA, instance_npcname("Geffen Bully#11");
specialeffect 122, AREA, instance_npcname("Geffen Bully#11");
specialeffect 143, AREA, instance_npcname("Geffen Bully#11");
specialeffect EF_STRIPSHIELD, AREA, instance_npcname("Geffen Bully#11");
specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#11");
specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#11");
sleep2 330;
specialeffect 32, AREA, instance_npcname("Geffen Bully#11");
specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#11");
hideonnpc instance_npcname("Geffen Bully#11");
hideoffnpc instance_npcname("Geffen Bully#1");
break;
@ -4435,18 +4436,18 @@ OnMobKilled:
case 40: npctalk "Geffen Bully : Let's get away!~!!!!!", instance_npcname("Geffen Bully#3"); break;
case 41:
npctalk "Loki : You have 10 seconds.", instance_npcname("Loki#3");
specialeffect 121, AREA, instance_npcname("Loki#3");
specialeffect EF_SONICBLOW, AREA, instance_npcname("Loki#3");
break;
case 43:
specialeffect 136, AREA, instance_npcname("Loki#3");
specialeffect EF_SLOWPOISON, AREA, instance_npcname("Loki#3");
npctalk "Loki : 10... 9...", instance_npcname("Loki#3");
sleep2 500;
specialeffect 269, AREA, instance_npcname("Loki#3");
specialeffect 126, AREA, instance_npcname("Loki#3");
specialeffect 127, AREA, instance_npcname("Loki#3");
specialeffect EF_STRIPWEAPON, AREA, instance_npcname("Loki#3");
specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#3");
specialeffect EF_POISONREACT2, AREA, instance_npcname("Loki#3");
break;
case 45:
specialeffect 125, AREA, instance_npcname("Loki#3");
specialeffect EF_ENCHANTPOISON, AREA, instance_npcname("Loki#3");
sleep2 500;
emotion e_gg, 0, instance_npcname("Loki#3");
npctalk "Loki : 3... 2...", instance_npcname("Loki#3");
@ -4456,8 +4457,8 @@ OnMobKilled:
npctalk "Geffen Bully : I will have my revenge~!!", instance_npcname("Geffen Bully#3");
break;
case 46:
specialeffect 361, AREA, instance_npcname("Loki#3");
specialeffect 124, AREA, instance_npcname("Loki#3");
specialeffect EF_SOULBREAKER, AREA, instance_npcname("Loki#3");
specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#3");
npctalk "Loki : 1...", instance_npcname("Loki#3");
sleep2 330;
hideonnpc instance_npcname("Geffen Bully#1");
@ -4644,7 +4645,7 @@ OnTimer1000:
'gmt_timer_evt3++;
switch('gmt_timer_evt3) {
case 1: specialeffect 20, AREA, instance_npcname("Geffen Shoplifter#1"); break;
case 1: specialeffect EF_PATTACK, AREA, instance_npcname("Geffen Shoplifter#1"); break;
case 4: npctalk "Geffen Shoplifter : Ugh, I shouldn't fight toe to toe with anyone...", instance_npcname("Geffen Shoplifter#1"); break;
case 7: unittalk 'gmt_account_id, "Don't want to be in a fair fight, huh thief?"; break;
case 10: npctalk "Geffen Shoplifter : Umm... stealing zeny is my job~ I did nothing wrong~!", instance_npcname("Geffen Shoplifter#1"); break;

View File

@ -1003,11 +1003,11 @@ OnInit:
mes "their Magic properties by";
mes "their casting effect.^000000";
next;
setarray .@effect[0],56,54,225;
setarray .@effect[0],EF_BEGINSPELL4,EF_BEGINSPELL2,EF_VOLCANO;
setarray .@color$[0],"Red","Yellow","Blue";
while(1) {
if (.@roof0 > 7) break;
set .@i, rand(3);
set .@i, rand(getarraysize(.@effect));
specialeffect .@effect[.@i];
mes "^3355FFThe Gemstones must";
mes "be arranged in the correct";

View File

@ -2099,19 +2099,19 @@ OnTouch_:
// .@j$: FragmentName
switch(.@seal) {
case 1:
setarray .@i[0],7437,1711,217,167,238;
setarray .@i[0],7437,1711,217,167,EF_LANDPROTECTOR;
set .@j$,"Misery";
break;
case 2:
setarray .@i[0],7436,1712,202,75,102;
setarray .@i[0],7436,1712,202,75,EF_CRASHEARTH;
set .@j$,"Agony";
break;
case 3:
setarray .@i[0],7438,1709,80,76,101;
setarray .@i[0],7438,1709,80,76,EF_REPAIRWEAPON;
set .@j$,"Hatred";
break;
case 4:
setarray .@i[0],7439,1710,62,171,100;
setarray .@i[0],7439,1710,62,171,EF_REMOVETRAP;
set .@j$,"Despair";
break;
}

View File

@ -3934,7 +3934,7 @@ lasagna,85,93,5 script Shaman meow#dorcon 4_DR_KID_01,{
mes "[Shaman meow]";
mes "I'll tell you today's talisman. It is...";
next;
specialeffect 330;
specialeffect EF_HITLINE;
mes "[Shaman meow]";
.@quest_id = rand(14560,14562);
switch( .@quest_id ) {
@ -6910,7 +6910,7 @@ conch_in,181,61,5 script Boatswain#dorcon 4_M_BOSSCAT,{
next;
mes "[Boatswain]";
mes "This... This is...";
specialeffect 66;
specialeffect EF_CURE;
next;
mes "[" + strcharinfo(0) + "]";
mes "What do you think?";
@ -6991,7 +6991,7 @@ conch_in,181,61,5 script Boatswain#dorcon 4_M_BOSSCAT,{
mes "This is the amulet for today! Give me all the Basilrocks you have.";
next;
mes "[Boatswain]";
specialeffect 66;
specialeffect EF_CURE;
if (isbegin_quest(14560) == 1) {
mes "It feels like watching the blue horizon on a clear and windless day. It is refreshing.";
next;
@ -8228,7 +8228,7 @@ lasa_dun03,161,292,5 script Lord Imuk#dorcon 4_NFWISP,{
next;
mes "[???]";
mes "How dare you treat me like a ghost! I have lived for ^0000cd2,500 years^000000!";
specialeffect2 29;
specialeffect2 EF_LIGHTBOLT;
next;
mes "[" + strcharinfo(0) + "]";
mes "Oww...that hurts. I'm sorry if I've offended you, but are you Imoogi, the chief of the Basilisk?";

View File

@ -14,6 +14,6 @@
//ACMD_FUNC(newcommand)
//{
// clif_displaymessage(fd, "It works!");
// clif_specialeffect(&sd->bl, 343, AREA);
// clif_specialeffect(&sd->bl, EF_HEARTCASTING, AREA);
// return 0;
//}

View File

@ -997,7 +997,7 @@ ACMD_FUNC(hide)
map_foreachinmovearea(clif_insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
} else {
sd->sc.option |= OPTION_INVISIBLE;
sd->vd.class_ = INVISIBLE_CLASS;
sd->vd.class_ = JT_INVISIBLE;
clif_displaymessage(fd, msg_txt(sd,11)); // Invisible: On
// decrement the number of pvp players on the map
@ -3134,7 +3134,7 @@ ACMD_FUNC(doom)
if (pl_sd->fd != fd && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
{
status_kill(&pl_sd->bl);
clif_specialeffect(&pl_sd->bl,450,AREA);
clif_specialeffect(&pl_sd->bl,EF_GRANDCROSS2,AREA);
clif_displaymessage(pl_sd->fd, msg_txt(sd,61)); // The holy messenger has given judgement.
}
}
@ -3161,7 +3161,7 @@ ACMD_FUNC(doommap)
if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
{
status_kill(&pl_sd->bl);
clif_specialeffect(&pl_sd->bl,450,AREA);
clif_specialeffect(&pl_sd->bl,EF_GRANDCROSS2,AREA);
clif_displaymessage(pl_sd->fd, msg_txt(sd,61)); // The holy messenger has given judgement.
}
}
@ -5300,7 +5300,7 @@ ACMD_FUNC(email)
*------------------------------------------*/
ACMD_FUNC(effect)
{
int type = 0, flag = 0;
int type = EF_NONE;
nullpo_retr(-1, sd);
if (!message || !*message || sscanf(message, "%11d", &type) < 1) {
@ -5308,7 +5308,13 @@ ACMD_FUNC(effect)
return -1;
}
clif_specialeffect(&sd->bl, type, (send_target)flag);
if( type <= EF_NONE || type >= EF_MAX ){
sprintf(atcmd_output, msg_txt(sd,1152),EF_NONE+1,EF_MAX-1); // Please enter a valid effect id in the range from %d to %d.
clif_displaymessage(fd, atcmd_output);
return -1;
}
clif_specialeffect(&sd->bl, type, ALL_CLIENT);
clif_displaymessage(fd, msg_txt(sd,229)); // Your effect has changed.
return 0;
}
@ -6816,7 +6822,7 @@ ACMD_FUNC(summon)
md->master_id=sd->bl.id;
md->special_state.ai=AI_ATTACK;
md->deletetimer=add_timer(tick+(duration*60000),mob_timer_delete,md->bl.id,0);
clif_specialeffect(&md->bl,344,AREA);
clif_specialeffect(&md->bl,EF_ENTRY2,AREA);
mob_spawn(md);
sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
@ -7414,7 +7420,7 @@ ACMD_FUNC(homlevel)
status_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100);
clif_specialeffect(&hd->bl,568,AREA);
clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
return 0;
}
@ -7996,9 +8002,9 @@ ACMD_FUNC(size)
sd->state.size = size;
if( size == SZ_MEDIUM )
clif_specialeffect(&sd->bl,420,AREA);
clif_specialeffect(&sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG )
clif_specialeffect(&sd->bl,422,AREA);
clif_specialeffect(&sd->bl,EF_GIANTBODY,AREA);
clif_displaymessage(fd, msg_txt(sd,1303)); // Size change applied.
return 0;
@ -8023,9 +8029,9 @@ ACMD_FUNC(sizeall)
pl_sd->state.size = size;
if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA);
clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG )
clif_specialeffect(&pl_sd->bl,422,AREA);
clif_specialeffect(&pl_sd->bl,EF_GIANTBODY,AREA);
}
}
mapit_free(iter);
@ -8065,9 +8071,9 @@ ACMD_FUNC(sizeguild)
pl_sd->state.size = size;
if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA);
clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG )
clif_specialeffect(&pl_sd->bl,422,AREA);
clif_specialeffect(&pl_sd->bl,EF_GIANTBODY,AREA);
}
}

View File

@ -1160,7 +1160,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
//Kaupe blocks damage (skill or otherwise) from players, mobs, homuns, mercenaries.
if ((sce = sc->data[SC_KAUPE]) && rnd()%100 < sce->val2) {
clif_specialeffect(bl, 462, AREA);
clif_specialeffect(bl, EF_STORMKICK4, AREA);
//Shouldn't end until Breaker's non-weapon part connects.
#ifndef RENEWAL
if (skill_id != ASC_BREAKER || !(flag&BF_WEAPON))
@ -1176,7 +1176,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
#endif
if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rnd()%100 < sce->val2) {
clif_specialeffect(bl, 462, AREA); // Still need confirm it.
clif_specialeffect(bl, EF_STORMKICK4, AREA); // Still need confirm it.
return 0;
}
@ -1185,7 +1185,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if (!status_isdead(src))
skill_counter_additional_effect( src, bl, skill_id, skill_lv, flag, gettick() );
if (sce) {
clif_specialeffect(bl, 462, AREA);
clif_specialeffect(bl, EF_STORMKICK4, AREA);
skill_blown(src,bl,sce->val3,-1,BLOWN_NONE);
}
//Both need to be consumed if they are active.
@ -1408,7 +1408,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
}
if ((sce = sc->data[SC_P_ALTER]) && damage > 0) {
clif_specialeffect(bl, 336, AREA);
clif_specialeffect(bl, EF_GUARD, AREA);
sce->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
if (sce->val3 >= 0)
damage = 0;
@ -2369,7 +2369,7 @@ static bool is_attack_critical(struct Damage wd, struct block_list *src, struct
case 0:
if(sc && !sc->data[SC_AUTOCOUNTER])
break;
clif_specialeffect(src, 131, AREA);
clif_specialeffect(src, EF_AUTOCOUNTER, AREA);
status_change_end(src, SC_AUTOCOUNTER, INVALID_TIMER);
case KN_AUTOCOUNTER:
if(battle_config.auto_counter_type &&

View File

@ -1060,7 +1060,7 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
WBUFW(buf,24) = vd->head_top;
WBUFW(buf,26) = vd->head_mid;
if( bl->type == BL_NPC && vd->class_ == FLAG_CLASS )
if( bl->type == BL_NPC && vd->class_ == JT_GUILD_FLAG )
{ //The hell, why flags work like this?
WBUFW(buf,22) = status_get_emblem_id(bl);
WBUFW(buf,24) = GetWord(status_get_guild_id(bl), 1);
@ -1371,22 +1371,22 @@ static void clif_weather_check(struct map_session_data *sd)
|| map[m].flag.clouds2)
{
if (map[m].flag.snow)
clif_specialeffect_single(&sd->bl, 162, fd);
clif_specialeffect_single(&sd->bl, EF_SNOW, fd);
if (map[m].flag.clouds)
clif_specialeffect_single(&sd->bl, 233, fd);
clif_specialeffect_single(&sd->bl, EF_CLOUD3, fd);
if (map[m].flag.clouds2)
clif_specialeffect_single(&sd->bl, 516, fd);
clif_specialeffect_single(&sd->bl, EF_CLOUD5, fd);
if (map[m].flag.fog)
clif_specialeffect_single(&sd->bl, 515, fd);
clif_specialeffect_single(&sd->bl, EF_CLOUD4, fd);
if (map[m].flag.fireworks) {
clif_specialeffect_single(&sd->bl, 297, fd);
clif_specialeffect_single(&sd->bl, 299, fd);
clif_specialeffect_single(&sd->bl, 301, fd);
clif_specialeffect_single(&sd->bl, EF_POKJUK, fd);
clif_specialeffect_single(&sd->bl, EF_THROWITEM2, fd);
clif_specialeffect_single(&sd->bl, EF_POKJUK_SOUND, fd);
}
if (map[m].flag.sakura)
clif_specialeffect_single(&sd->bl, 163, fd);
clif_specialeffect_single(&sd->bl, EF_SAKURA, fd);
if (map[m].flag.leaves)
clif_specialeffect_single(&sd->bl, 333, fd);
clif_specialeffect_single(&sd->bl, EF_MAPLE, fd);
}
}
/**
@ -1415,7 +1415,7 @@ int clif_spawn(struct block_list *bl)
int len;
vd = status_get_viewdata(bl);
if( !vd || vd->class_ == INVISIBLE_CLASS )
if( !vd || vd->class_ == JT_INVISIBLE )
return 0;
/**
@ -1443,9 +1443,9 @@ int clif_spawn(struct block_list *bl)
if (sd->spiritball > 0)
clif_spiritball(&sd->bl);
if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect(bl,423,AREA);
clif_specialeffect(bl,EF_GIANTBODY2,AREA);
else if(sd->state.size==SZ_MEDIUM)
clif_specialeffect(bl,421,AREA);
clif_specialeffect(bl,EF_BABYBODY2,AREA);
if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd);
if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
@ -1460,18 +1460,18 @@ int clif_spawn(struct block_list *bl)
{
TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
clif_specialeffect(&md->bl,423,AREA);
clif_specialeffect(&md->bl,EF_GIANTBODY2,AREA);
else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA);
clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
}
break;
case BL_NPC:
{
TBL_NPC *nd = ((TBL_NPC*)bl);
if( nd->size == SZ_BIG )
clif_specialeffect(&nd->bl,423,AREA);
clif_specialeffect(&nd->bl,EF_GIANTBODY2,AREA);
else if( nd->size == SZ_MEDIUM )
clif_specialeffect(&nd->bl,421,AREA);
clif_specialeffect(&nd->bl,EF_BABYBODY2,AREA);
clif_efst_status_change_sub(bl, bl, AREA);
clif_progressbar_npc_area(nd);
}
@ -1723,9 +1723,9 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_
TBL_PC *sd = ((TBL_PC*)bl);
// clif_movepc(sd);
if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect(&sd->bl,423,AREA);
clif_specialeffect(&sd->bl,EF_GIANTBODY2,AREA);
else if(sd->state.size==SZ_MEDIUM)
clif_specialeffect(&sd->bl,421,AREA);
clif_specialeffect(&sd->bl,EF_BABYBODY2,AREA);
if (sd->status.robe)
clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
}
@ -1734,9 +1734,9 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_
{
TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
clif_specialeffect(&md->bl,423,AREA);
clif_specialeffect(&md->bl,EF_GIANTBODY2,AREA);
else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA);
clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
}
break;
case BL_PET:
@ -1762,7 +1762,7 @@ void clif_move(struct unit_data *ud)
if (!vd )
return;
//This performance check is needed to keep GM-hidden objects from being notified to bots.
else if( vd->class_ == INVISIBLE_CLASS ){
else if( vd->class_ == JT_INVISIBLE ){
// If the player was disguised we still need to update the disguised unit, since the main unit will be updated through clif_walkok
if(disguised(bl)) {
WBUFW(buf,0)=0x86;
@ -3492,7 +3492,7 @@ void clif_changelook(struct block_list *bl, int type, int val) {
if (!sd)
break;
if ( val == INVISIBLE_CLASS )
if ( val == JT_INVISIBLE )
return;
if (sd->sc.option&OPTION_COSTUME)
@ -4612,7 +4612,7 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
int len;
vd = status_get_viewdata(bl);
if (!vd || vd->class_ == INVISIBLE_CLASS)
if (!vd || vd->class_ == JT_INVISIBLE)
return;
/**
@ -4638,9 +4638,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
clif_getareachar_pc(sd, tsd);
if(tsd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect_single(bl,423,sd->fd);
clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
else if(tsd->state.size==SZ_MEDIUM)
clif_specialeffect_single(bl,421,sd->fd);
clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
if( tsd->bg_id && map[tsd->bl.m].flag.battleground )
clif_sendbgemblem_single(sd->fd,tsd);
if ( tsd->status.robe )
@ -4659,9 +4659,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
if( nd->chat_id )
clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd);
if( nd->size == SZ_BIG )
clif_specialeffect_single(bl,423,sd->fd);
clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
else if( nd->size == SZ_MEDIUM )
clif_specialeffect_single(bl,421,sd->fd);
clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
clif_efst_status_change_sub(&sd->bl, bl, SELF);
clif_progressbar_npc(nd, sd);
}
@ -4670,9 +4670,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
{
TBL_MOB* md = (TBL_MOB*)bl;
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
clif_specialeffect_single(bl,423,sd->fd);
clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect_single(bl,421,sd->fd);
clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
#if PACKETVER >= 20120404
if (battle_config.monster_hp_bars_info && !map[bl->m].flag.hidemobhpbar) {
int i;
@ -5152,7 +5152,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
nullpo_ret(bl);
switch(bl->type){
case BL_PC:
if(sd->vd.class_ != INVISIBLE_CLASS)
if(sd->vd.class_ != JT_INVISIBLE)
clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
if(sd->chatID){
struct chat_data *cd;
@ -5176,7 +5176,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
break;
default:
if((vd=status_get_viewdata(bl)) && vd->class_ != INVISIBLE_CLASS)
if((vd=status_get_viewdata(bl)) && vd->class_ != JT_INVISIBLE)
clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
break;
}
@ -5185,7 +5185,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
nullpo_ret(tbl);
if(tbl->type == BL_SKILL) //Trap knocked out of sight
clif_clearchar_skillunit((struct skill_unit *)tbl,sd->fd);
else if(((vd=status_get_viewdata(tbl)) && vd->class_ != INVISIBLE_CLASS) &&
else if(((vd=status_get_viewdata(tbl)) && vd->class_ != JT_INVISIBLE) &&
!(tbl->type == BL_NPC && (((TBL_NPC*)tbl)->sc.option&OPTION_INVISIBLE)))
clif_clearunit_single(tbl->id,CLR_OUTSIGHT,sd->fd);
}

View File

@ -594,7 +594,7 @@ int hom_evolution(struct homun_data *hd)
clif_spawn(&hd->bl);
clif_emotion(&sd->bl, E_NO1);
clif_specialeffect(&hd->bl,568,AREA);
clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
//status_Calc flag&1 will make current HP/SP be reloaded from hom structure
hom->hp = hd->battle_status.hp;
@ -645,7 +645,7 @@ int hom_mutate(struct homun_data *hd, int homun_id)
clif_spawn(&hd->bl);
clif_emotion(&sd->bl, E_NO1);
clif_specialeffect(&hd->bl,568,AREA);
clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
//status_Calc flag&1 will make current HP/SP be reloaded from hom structure
hom = &hd->homunculus;
@ -705,7 +705,7 @@ void hom_gainexp(struct homun_data *hd,int exp)
if( hd->exp_next == 0 )
hd->homunculus.exp = 0 ;
clif_specialeffect(&hd->bl,568,AREA);
clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
status_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100);
}
@ -1335,7 +1335,7 @@ int hom_shuffle(struct homun_data *hd)
clif_homskillinfoblock(sd);
status_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100);
clif_specialeffect(&hd->bl,568,AREA);
clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
return 1;
}

View File

@ -111,9 +111,9 @@ static struct script_event_s
struct view_data* npc_get_viewdata(int class_)
{ //Returns the viewdata for normal npc classes.
if( class_ == INVISIBLE_CLASS )
if( class_ == JT_INVISIBLE )
return &npc_viewdb[0];
if (npcdb_checkid(class_) || class_ == WARP_CLASS){
if (npcdb_checkid(class_)){
if( class_ > MAX_NPC_CLASS2_START ){
return &npc_viewdb2[class_-MAX_NPC_CLASS2_START];
}else{
@ -234,7 +234,7 @@ int npc_enable(const char* name, int flag)
clif_clearunit_area(&nd->bl,CLR_OUTSIGHT); // Hack to trick maya purple card [Xazax]
}
if (nd->class_ == WARP_CLASS || nd->class_ == FLAG_CLASS)
if (nd->class_ == JT_WARPNPC || nd->class_ == JT_GUILD_FLAG)
{ //Client won't display option changes for these classes [Toms]
if (nd->sc.option&(OPTION_HIDE|OPTION_INVISIBLE))
clif_clearunit_area(&nd->bl, CLR_OUTSIGHT);
@ -2396,7 +2396,7 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
* Support for using Constants in place of NPC View IDs.
*/
int npc_parseview(const char* w4, const char* start, const char* buffer, const char* filepath) {
int val = -1, i = 0;
int val = JT_FAKENPC, i = 0;
char viewid[1024]; // Max size of name from const.txt, see read_constdb.
// Extract view ID / constant
@ -2413,8 +2413,8 @@ int npc_parseview(const char* w4, const char* start, const char* buffer, const c
if(!npc_viewisid(viewid)) {
// Check if constant exists and get its value.
if(!script_get_constant(viewid, &val)) {
ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE_CLASS. \n", viewid, filepath, strline(buffer,start-buffer));
val = INVISIBLE_CLASS;
ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE. \n", viewid, filepath, strline(buffer,start-buffer));
val = JT_INVISIBLE;
}
} else {
// NPC has an ID specified for view id.
@ -2429,7 +2429,7 @@ int npc_parseview(const char* w4, const char* start, const char* buffer, const c
*/
bool npc_viewisid(const char * viewid)
{
if(atoi(viewid) != -1) {
if(atoi(viewid) != JT_FAKENPC) {
// Loop through view, looking for non-numeric character.
while (*viewid) {
if (ISDIGIT(*viewid++) == 0) return false;
@ -2495,9 +2495,9 @@ struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short
safestrncpy(nd->name, nd->exname, ARRAYLENGTH(nd->name));
if( battle_config.warp_point_debug )
nd->class_ = WARP_DEBUG_CLASS;
nd->class_ = JT_GUILD_FLAG;
else
nd->class_ = WARP_CLASS;
nd->class_ = JT_WARPNPC;
nd->speed = 200;
nd->u.warp.mapindex = to_mapindex;
@ -2567,9 +2567,9 @@ static const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const
npc_parsename(nd, w3, start, buffer, filepath);
if (!battle_config.warp_point_debug)
nd->class_ = WARP_CLASS;
nd->class_ = JT_WARPNPC;
else
nd->class_ = WARP_DEBUG_CLASS;
nd->class_ = JT_GUILD_FLAG;
nd->speed = 200;
nd->u.warp.mapindex = i;
@ -2801,7 +2801,7 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
}
npc_parsename(nd, w3, start, buffer, filepath);
nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
nd->speed = 200;
++npc_shop;
@ -3036,7 +3036,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
}
npc_parsename(nd, w3, start, buffer, filepath);
nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
nd->speed = 200;
nd->u.scr.script = script;
nd->u.scr.label_list = label_list;
@ -3164,7 +3164,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
nd = npc_create_npc(m, x, y);
npc_parsename(nd, w3, start, buffer, filepath);
nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
nd->speed = 200;
nd->src_id = src_id;
nd->bl.type = BL_NPC;
@ -3192,9 +3192,9 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
case NPCTYPE_WARP:
++npc_warp;
if( !battle_config.warp_point_debug )
nd->class_ = WARP_CLASS;
nd->class_ = JT_WARPNPC;
else
nd->class_ = WARP_DEBUG_CLASS;
nd->class_ = JT_GUILD_FLAG;
nd->u.warp.xs = xs;
nd->u.warp.ys = ys;
nd->u.warp.mapindex = dnd->u.warp.mapindex;
@ -3281,7 +3281,7 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) {
map_addnpc(m, wnd);
safestrncpy(wnd->name, "", ARRAYLENGTH(wnd->name));
safestrncpy(wnd->exname, newname, ARRAYLENGTH(wnd->exname));
wnd->class_ = WARP_CLASS;
wnd->class_ = JT_WARPNPC;
wnd->speed = 200;
wnd->u.warp.mapindex = map_id2index(imap);
wnd->u.warp.x = snd->u.warp.x;
@ -4756,7 +4756,7 @@ void do_init_npc(void){
//Stock view data for normal npcs.
memset(&npc_viewdb, 0, sizeof(npc_viewdb));
npc_viewdb[0].class_ = INVISIBLE_CLASS; //Invisible class is stored here.
npc_viewdb[0].class_ = JT_INVISIBLE; //Invisible class is stored here.
for( i = 1; i < MAX_NPC_CLASS; i++ )
npc_viewdb[i].class_ = i;
for( i = MAX_NPC_CLASS2_START; i < MAX_NPC_CLASS2_END; i++ )
@ -4807,7 +4807,7 @@ void do_init_npc(void){
fake_nd = (struct npc_data *)aCalloc(1,sizeof(struct npc_data));
fake_nd->bl.m = -1;
fake_nd->bl.id = npc_get_new_npc_id();
fake_nd->class_ = -1;
fake_nd->class_ = JT_FAKENPC;
fake_nd->speed = 200;
strcpy(fake_nd->name,"FAKE_NPC");
memcpy(fake_nd->exname, fake_nd->name, 9);

View File

@ -110,24 +110,988 @@ extern struct eri *npc_sc_display_ers;
#define START_NPC_NUM 110000000
enum actor_classes
enum e_job_types
{
WARP_CLASS = 45,
HIDDEN_WARP_CLASS = 139,
WARP_DEBUG_CLASS = 722,
FLAG_CLASS = 722,
INVISIBLE_CLASS = 32767,
NPC_RANGE1_START = 44,
JT_WARPNPC,
JT_1_ETC_01,
JT_1_M_01,
JT_1_M_02,
JT_1_M_03,
JT_1_M_04,
JT_1_M_BARD,
JT_1_M_HOF,
JT_1_M_INNKEEPER,
JT_1_M_JOBGUIDER,
JT_1_M_JOBTESTER,
JT_1_M_KNIGHTMASTER,
JT_1_M_LIBRARYMASTER,
JT_1_M_MERCHANT,
JT_1_M_ORIENT01,
JT_1_M_PASTOR,
JT_1_M_PUBMASTER,
JT_1_M_SIZ,
JT_1_M_SMITH,
JT_1_M_WIZARD,
JT_1_M_YOUNGKNIGHT,
JT_1_F_01,
JT_1_F_02,
JT_1_F_03,
JT_1_F_04,
JT_1_F_GYPSY,
JT_1_F_LIBRARYGIRL,
JT_1_F_MARIA,
JT_1_F_MERCHANT_01,
JT_1_F_MERCHANT_02,
JT_1_F_ORIENT_01,
JT_1_F_ORIENT_02,
JT_1_F_ORIENT_03,
JT_1_F_ORIENT_04,
JT_1_F_PRIEST,
JT_1_F_PUBGIRL,
JT_4_DOG01,
JT_4_KID01,
JT_4_M_01,
JT_4_M_02,
JT_4_M_03,
JT_4_M_04,
JT_4_M_BARBER,
JT_4_M_ORIENT01,
JT_4_M_ORIENT02,
JT_4_F_01,
JT_4_F_02,
JT_4_F_03,
JT_4_F_04,
JT_4_F_MAID,
JT_4_F_SISTER,
JT_4W_KID,
JT_4W_M_01,
JT_4W_M_02,
JT_4W_M_03,
JT_4W_SAILOR,
JT_4W_F_01,
JT_8_F,
JT_8_F_GRANDMOTHER,
JT_EFFECTLAUNCHER,
JT_8W_SOLDIER,
JT_1_M_MOC_LORD,
JT_1_M_PAY_ELDER,
JT_1_M_PRON_KING,
JT_4_M_MANAGER,
JT_4_M_MINISTER,
JT_HIDDEN_NPC,
JT_4_F_KAFRA6,
JT_4_F_KAFRA5,
JT_4_F_KAFRA4,
JT_4_F_KAFRA3,
JT_4_F_KAFRA2,
JT_4_F_KAFRA1,
JT_2_M_THIEFMASTER,
JT_2_M_SWORDMASTER,
JT_2_M_PHARMACIST,
JT_2_M_MOLGENSTEIN,
JT_2_M_DYEINGER,
JT_2_F_MAGICMASTER,
JT_4_F_TELEPORTER,
JT_4_M_TELEPORTER,
NPC_RANGE1_END,
JT_HIDDEN_WARP_NPC = 139,
NPC_RANGE2_START = 400,
JT_4_M_MUT2,
JT_4_M_SCIENCE,
JT_4_F_VALKYRIE2,
JT_4_M_UNCLEKNIGHT,
JT_4_M_YOUNGKNIGHT,
JT_2_MONEMUS,
JT_4_M_ATEIL,
JT_4_F_ANNIVERSARY,
JT_4_M_GREATPO,
JT_4_M_NOVELIST,
JT_4_M_CHAMPSOUL,
JT_4_M_OLDFRIAR,
JT_4_M_CRU_SOLD,
JT_4_M_CRU_KNT,
JT_4_M_CRU_HEAD,
JT_4_M_CRU_CRUA,
JT_4_M_KY_SOLD,
JT_4_M_KY_KNT,
JT_4_M_KY_HEAD,
JT_4_M_KY_KIYOM,
JT_4_M_BOSSCAT,
JT_4_M_BABYCAT,
JT_4W_F_KAFRA2,
JT_4_F_MUNAK,
JT_4_M_BONGUN,
JT_4_BEAR,
JT_4_BLUEWOLF,
JT_4_PECOPECO,
JT_4_M_JP_MID,
JT_4_M_JP_RUN,
JT_4_ORCLADY,
JT_4_ORCLADY2,
JT_4_ORCWARRIOR,
JT_4_ORCWARRIOR2,
JT_4_F_FAIRY,
JT_4_F_FAIRYKID,
JT_4_F_FAIRYKID2,
JT_4_F_FAIRYKID3,
JT_4_F_FAIRYKID4,
JT_4_F_FAIRYKID5,
JT_4_F_FAIRYKID6,
JT_4_M_FAIRYKID,
JT_4_M_FAIRYKID2,
JT_4_M_FAIRYKID3,
JT_4_M_FAIRYKID4,
JT_4_M_FAIRYKID5,
JT_4_M_FAIRYSOLDIER,
JT_4_M_TUFFOLD,
JT_4_MAN_BENKUNI,
JT_4_MAN_GALTUN,
JT_4_MAN_JERUTOO,
JT_4_MAN_LAVAIL,
JT_4_MAN_NITT,
JT_4_MAN_PIOM,
JT_4_MAN_PIOM2,
JT_4_M_DSTMAN,
JT_4_M_DSTMANDEAD,
JT_4_BABYLEOPARD,
JT_4_M_REDSWORD,
JT_4_MAN_PIOM3,
JT_4_M_FAIRYSOLDIER2,
JT_4_F_FAIRYSOLDIER,
JT_4_DRAGON_EGG,
JT_4_MIMIC,
JT_4_F_FAIRY1,
JT_4_F_GUILLOTINE,
JT_4_M_GUILLOTINE,
JT_4_M_KNIGHT_BLACK,
JT_4_M_KNIGHT_GOLD,
JT_4_M_KNIGHT_SILVER,
JT_4_SKULL_MUD,
JT_4_M_BRZ_INDIAN,
JT_4_F_BRZ_INDIAN,
JT_4_F_BRZ_INDOLD,
JT_4_M_BRZ_JACI,
JT_4_M_BRZ_MAN1,
JT_4_M_BRZ_MAN2,
JT_4_F_BRZ_WOMAN,
JT_4_M_MINSTREL,
JT_4_M_MINSTREL1,
JT_4_M_SHADOWCHASER,
JT_4_F_SHADOWCHASER,
JT_4_M_SURA,
JT_4_F_SURA,
JT_4_F_WANDERER,
JT_4_M_BARD,
JT_1_FLAG_NOFEAR,
JT_4_M_NOFEARGUY,
JT_4_MAN_PIOM6,
JT_4_MAN_PIOM4,
JT_4_MAN_PIOM5,
JT_4_MAN_GALTUN1,
JT_4_HUMAN_GERUTOO,
JT_4_M_ROKI,
JT_4_M_MERCAT1,
JT_4_M_MERCAT2,
JT_4_M_CATMAN1,
JT_4_M_CATMAN2,
JT_4_F_BRZ_WOMAN2,
JT_4_M_JP_DISH,
JT_4_F_JP_NOAH,
JT_4_F_JP_OZ,
JT_4_F_JP_CHROME,
JT_4_F_JP_RINNE,
JT_4_WHITETIGER,
JT_4_VENDING_MACHINE,
JT_4_MISTY,
JT_4_NECORING,
JT_4_ELEPHANT,
JT_4_F_NYDHOG,
JT_4_F_NYDHOG2,
JT_4_M_ROKI2,
JT_4_M_DOGTRAVELER,
JT_4_M_DOGTRAVELER2,
JT_4_F_DOGTRAVELER,
JT_4_M_RAFLE_GR,
JT_4_M_RAFLE_OLD,
JT_4_F_RAFLE_PK,
JT_4_M_LYINGDOG,
JT_4_F_MORAFINE1,
JT_4_F_MORAFINE2,
JT_4_M_RAFLE_OR,
JT_4_F_RAFLE_YE,
JT_4_M_RAFLE_VI,
JT_4_F_RAFLE_VI,
JT_4_M_ARDHA,
JT_4_CREEPER,
JT_JP_RUFAKU,
JT_JP_SUPIKA,
JT_JP_SABIKU,
JT_JP_ARUGORU,
JT_JP_ARUNA,
JT_JP_AIRI,
JT_4_M_DEWOLDMAN,
JT_4_M_DEWOLDWOMAN,
JT_4_M_DEWMAN,
JT_4_M_DEWWOMAN,
JT_4_M_DEWBOY,
JT_4_M_DEWGIRL,
JT_4_M_DEWZATICHIEF,
JT_4_M_DEWZATIMAN,
JT_4_M_ALCHE_E,
JT_4_MASK_SMOKEY,
JT_4_CAT_SAILOR1,
JT_4_CAT_SAILOR2,
JT_4_CAT_SAILOR3,
JT_4_CAT_SAILOR4,
JT_4_CAT_CHEF,
JT_4_CAT_MERMASTER,
JT_4_CRACK,
JT_4_ASTER,
JT_4_F_STARFISHGIRL,
JT_4_CAT_DOWN,
JT_4_CAT_REST,
JT_4_CAT_3COLOR,
JT_4_CAT_ADMIRAL,
JT_4_SOIL,
JT_4_F_ALCHE_A,
JT_4_CAT_ADV1,
JT_4_CAT_ADV2,
JT_4_CAT_SAILOR5,
JT_2_DROP_MACHINE,
JT_2_SLOT_MACHINE,
JT_2_VENDING_MACHINE1,
JT_MOB_TOMB,
JT_4_MYSTCASE,
JT_4_M_SIT_NOVICE,
JT_4_OCTOPUS_LEG,
JT_4_F_NURSE,
JT_4_MAL_SOLDIER,
JT_4_MAL_CAPTAIN,
JT_4_MAL_BUDIDAI,
JT_4_M_MAYOR,
JT_4_M_BARYO_OLD,
JT_4_F_BARYO_OLD,
JT_4_F_BARYO_GIRL,
JT_4_M_BARYO_BOY,
JT_4_M_BARYO_MAN,
JT_4_F_BARYO_WOMAN,
JT_4_BARYO_CHIEF,
JT_4_MAL_KAFRA,
JT_4_M_MALAYA,
JT_4_F_MALAYA,
JT_4_F_PATIENT,
JT_4_M_PATIENT,
JT_4_F_KR_TIGER,
JT_4_M_KR_BOY,
JT_4_M_KAGE_OLD,
JT_4_WHIKEBAIN,
JT_4_EREND,
JT_4_RAWREL,
JT_4_ARMAIA,
JT_4_KAVAC,
JT_4_YGNIZEM,
JT_4_EREMES,
JT_4_MAGALETA,
JT_4_KATRINN,
JT_4_SHECIL,
JT_4_SEYREN,
JT_4_HARWORD,
JT_4_F_JP_CYNTHIA,
JT_4_M_JP_GUSTON,
JT_4_M_JP_BERKUT,
JT_4_F_JP_DARK_ADELAIDE,
JT_4_M_JP_DARK_DARIUS,
JT_4_M_JP_JESTER,
JT_XMAS_SMOKEY_B,
JT_XMAS_SMOKEY_R,
JT_XMAS_SMOKEY_Y,
JT_4_F_CLOCKDOLL,
JT_4_F_FAIRY2,
JT_4_F_PINKWOMAN,
JT_4_FAIRYDEADLEAF,
JT_4_FROG,
JT_4_M_BLACKMAN,
JT_4_M_BLUEMAN,
JT_4_M_FAIRYANG,
JT_4_M_FAIRYAVANT,
JT_4_M_FAIRYFREAK,
JT_4_M_FAIRYKID6,
JT_4_M_FAIRYSCHOLAR,
JT_4_M_FAIRYSCHOLAR_DIRTY,
JT_4_M_FARIY_HISIE,
JT_4_M_FARIYKING,
JT_4_M_NEWOZ,
JT_4_M_OLIVER,
JT_4_M_PROFESSORWORM,
JT_4_M_REDMAN,
JT_4_F_GELKA,
JT_4_M_ROTERT,
JT_4_BLACKDRAGON,
JT_4_M_GUNSLINGER,
JT_4_F_GUNSLINGER,
JT_4_M_ARCHER,
JT_4_M_SWORDMAN,
JT_4_M_NINJA_RED,
JT_4_M_NINJA_BLUE,
JT_4_M_THIEF_RUMIN,
JT_4_M_NOV_RUMIN,
JT_4_F_MAYSEL,
JT_4_F_ACOLYTE,
JT_4_M_NOV_HUNT,
JT_4_F_GENETIC,
JT_4_F_TAEKWON,
JT_4_F_SWORDMAN,
JT_4_F_IU,
JT_4_M_RAGI,
JT_4_M_MELODY,
JT_4_TRACE,
JT_4_F_HIMEL,
JT_4_LEVITATEMAN,
JT_4_M_HEINRICH,
JT_4_M_ROYALGUARD,
JT_4_M_BARMUND,
JT_4_F_KHALITZBURG,
JT_4_F_HIMEL2,
JT_4_WHITEKNIGHT,
JT_4_COCO,
JT_4_M_ALADDIN,
JT_4_M_GENIE,
JT_4_F_GENIE,
JT_4_JP_MID_SWIM,
JT_4_JP_RUNE_SWIM,
JT_4_F_FENRIR,
JT_4_F_GEFFEN_FAY,
JT_4_F_IRIS,
JT_4_F_LUCILE,
JT_4_F_SARAH_BABY,
JT_4_GEFFEN_01,
JT_4_GEFFEN_02,
JT_4_GEFFEN_03,
JT_4_GEFFEN_04,
JT_4_GEFFEN_05,
JT_4_GEFFEN_06,
JT_4_GEFFEN_07,
JT_4_GEFFEN_08,
JT_4_GEFFEN_09,
JT_4_GEFFEN_10,
JT_4_GEFFEN_11,
JT_4_GEFFEN_12,
JT_4_GEFFEN_13,
JT_4_GEFFEN_14,
JT_4_M_CHAOS,
JT_4_M_CHIEF_IRIN,
JT_4_M_SAKRAY,
JT_4_M_SAKRAYROYAL,
JT_4_TOWER_01,
JT_4_TOWER_02,
JT_4_TOWER_03,
JT_4_TOWER_04,
JT_4_TOWER_05,
JT_4_TOWER_06,
JT_4_TOWER_07,
JT_4_TOWER_08,
JT_4_TOWER_09,
JT_4_TOWER_10,
JT_4_TOWER_11,
JT_4_TOWER_12,
JT_4_TOWER_13,
JT_8_F_GIRL,
JT_4_F_GODEMOM,
JT_4_F_GON,
JT_4_F_KID2,
JT_4_M_BIBI,
JT_4_M_GEF_SOLDIER,
JT_4_M_KID1,
JT_4_M_MOC_SOLDIER,
JT_4_M_PAY_SOLDIER,
JT_4_M_SEAMAN,
JT_4_M_SNOWMAN,
JT_4_F_05,
JT_4_M_05,
JT_4_M_06,
JT_4_F_06,
JT_4_M_PIERROT,
JT_4_M_KID2,
JT_4_F_KID3,
JT_4_M_SANTA,
JT_4_F_NACORURI,
JT_4_F_SHAMAN,
JT_4_F_KAFRA7,
JT_GUILD_FLAG,
JT_1_SHADOW_NPC,
JT_4_F_07,
JT_4_F_JOB_ASSASSIN,
JT_4_F_JOB_BLACKSMITH,
JT_4_F_JOB_HUNTER,
JT_4_F_JOB_KNIGHT,
JT_4_F_NOVICE,
JT_4_M_JOB_ASSASSIN,
JT_4_M_JOB_BLACKSMITH,
JT_4_M_JOB_HUNTER,
JT_4_M_JOB_KNIGHT1,
JT_4_M_JOB_KNIGHT2,
JT_4_M_JOB_WIZARD,
JT_4_BAPHOMET,
JT_4_DARKLORD,
JT_4_DEVIRUCHI,
JT_8_DOPPEL,
JT_2_M_ALCHE,
JT_2_M_BARD_ORIENT,
JT_2_M_SAGE_B,
JT_2_M_SAGE_OLD,
JT_4_F_ALCHE,
JT_4_F_CRU,
JT_4_F_MONK,
JT_4_F_ROGUE,
JT_4_M_ALCHE_A,
JT_4_M_ALCHE_B,
JT_4_M_ALCHE_C,
JT_4_M_CRU,
JT_4_M_CRU_OLD,
JT_4_M_MONK,
JT_4_M_SAGE_A,
JT_4_M_SAGE_C,
JT_4_F_SON,
JT_4_F_JPN2,
JT_4_F_JPN,
JT_4_F_JPNCHIBI,
JT_4_F_JPNOBA2,
JT_4_F_JPNOBA,
JT_4_M_JPN2,
JT_4_M_JPN,
JT_4_M_JPNCHIBI,
JT_4_M_JPNOJI2,
JT_4_M_JPNOJI,
JT_8_M_JPNSOLDIER,
JT_8_M_JPNMASTER,
JT_4_F_JPNMU,
JT_4_F_TWGIRL,
JT_4_F_TWGRANDMOM,
JT_4_F_TWMASKGIRL,
JT_4_F_TWMIDWOMAN,
JT_4_M_TWBOY,
JT_4_M_TWMASKMAN,
JT_4_M_TWMIDMAN,
JT_4_M_TWOLDMAN,
JT_4_M_TWTEAMAN,
JT_4_M_YOYOROGUE,
JT_8_M_TWSOLDIER,
JT_4_F_UMGIRL,
JT_4_F_UMOLDWOMAN,
JT_4_F_UMWOMAN,
JT_4_M_UMCHIEF,
JT_4_M_UMDANCEKID2,
JT_4_M_UMDANCEKID,
JT_4_M_UMKID,
JT_4_M_UMOLDMAN,
JT_4_M_UMSOLDIER,
JT_4_M_SALVATION,
JT_4_F_NFDEADKAFRA,
JT_4_F_NFDEADMGCIAN,
JT_4_F_NFLOSTGIRL,
JT_4_M_NFDEADMAN2,
JT_4_M_NFDEADMAN,
JT_4_M_NFDEADSWDMAN,
JT_4_M_NFLOSTMAN,
JT_4_M_NFMAN,
JT_4_NFBAT,
JT_4_NFCOCK,
JT_4_NFCOFFIN,
JT_4_NFWISP,
JT_1_F_SIGNZISK,
JT_1_M_SIGN1,
JT_1_M_SIGNALCHE,
JT_1_M_SIGNART,
JT_1_M_SIGNMCNT,
JT_1_M_SIGNMONK2,
JT_1_M_SIGNMONK,
JT_1_M_SIGNROGUE,
JT_4_F_VALKYRIE,
JT_TW_TOWER,
JT_2_M_OLDBLSMITH,
JT_4_F_CHNDOCTOR,
JT_4_F_CHNDRESS1,
JT_4_F_CHNDRESS2,
JT_4_F_CHNDRESS3,
JT_4_F_CHNWOMAN,
JT_4_M_CHN8GUEK,
JT_4_M_CHNCOOK,
JT_4_M_CHNGENERL,
JT_4_M_CHNMAN,
JT_4_M_CHNMONK,
JT_4_M_CHNOLD,
JT_4_M_CHNSOLDIER,
JT_4_M_DWARF,
JT_4_M_GRANDMONK,
JT_4_M_ROGUE,
JT_4_M_DOMINO,
JT_4_F_DOMINO,
JT_4_F_ZONDAGIRL,
JT_4_M_REIDIN_KURS,
JT_4_M_ZONDAOYAJI,
JT_4_M_BUDDHIST,
JT_2_BOARD1,
JT_2_BOARD2,
JT_2_BULLETIN_BOARD,
JT_4_F_THAIAYO,
JT_4_F_THAIGIRL,
JT_4_F_THAISHAMAN,
JT_4_M_THAIAYO,
JT_4_M_THAIOLD,
JT_4_M_THAIONGBAK,
JT_CLEAR_NPC,
JT_4_F_RACING,
JT_4_F_EINOLD,
JT_4_M_EINOLD,
JT_4_M_EINMINER,
JT_4_M_DIEMAN,
JT_4_F_EINWOMAN,
JT_4_M_REPAIR,
JT_4_M_EIN_SOLDIER,
JT_4_M_YURI,
JT_4_M_EINMAN2,
JT_4_M_EINMAN,
JT_2_F_SIGN1,
JT_4_BOARD3,
JT_4_BULLETIN_BOARD2,
JT_4_F_AGENTKAFRA,
JT_4_F_KAFRA8,
JT_4_F_KAFRA9,
JT_4_F_LGTGIRL,
JT_4_F_LGTGRAND,
JT_4_F_OPERATION,
JT_4_LGTSCIENCE,
JT_4_M_LGTGRAND,
JT_4_M_LGTGUARD2,
JT_4_M_LGTGUARD,
JT_4_M_LGTMAN,
JT_4_M_LGTPOOR,
JT_4_M_OPERATION,
JT_4_M_PRESIDENT,
JT_4_M_REINDEER,
JT_4_M_ZONDAMAN,
JT_4_M_PECOKNIGHT,
JT_4_CAT,
JT_4_F_YUNYANG,
JT_4_M_OILMAN,
JT_4_F_CAPEGIRL,
JT_4_M_MASKMAN,
JT_4_M_SITDOWN,
JT_4_F_SITDOWN,
JT_4_M_ALCHE_D,
JT_4_M_ACROSS,
JT_4_F_ACROSS,
JT_4_COOK,
JT_4_M_LIEMAN,
JT_2_POSTBOX,
JT_4_BULL,
JT_4_LAM,
JT_4_F_HUGIRL,
JT_4_F_HUGRANMA,
JT_4_F_HUWOMAN,
JT_4_F_KHELLISIA,
JT_4_F_KHELLY,
JT_4_M_HUBOY,
JT_4_M_HUGRANFA,
JT_4_M_HUMAN_01,
JT_4_M_HUMAN_02,
JT_4_M_HUMERCHANT,
JT_4_M_HUOLDARMY,
JT_4_M_KHKIEL,
JT_4_M_KHKYEL,
JT_4_M_KHMAN,
JT_4_F_KHWOMAN,
JT_4_F_KHGIRL,
JT_4_M_KHBOY,
JT_4_M_PHILMAN,
JT_4_PORING,
JT_2_COLAVEND,
JT_4_F_SOCCER,
JT_4_M_SOCCER7,
JT_4_M_SOCCER9,
JT_4_F_CHILD,
JT_4_F_MADAME,
JT_4_F_MASK1,
JT_4_F_MASK,
JT_4_F_RACHOLD,
JT_4_F_SHABBY,
JT_4_F_TRAINEE,
JT_4_M_CHILD1,
JT_4_M_CHILD,
JT_4_M_DOCTOR,
JT_4_M_FROZEN1,
JT_4_M_FROZEN,
JT_4_M_MASK1,
JT_4_M_MASK,
JT_4_M_MIDDLE1,
JT_4_M_MIDDLE,
JT_4_M_RACHMAN2,
JT_4_M_RACHMAN1,
JT_4_M_RACHOLD1,
JT_4_M_RACHOLD,
JT_4_M_RASWORD,
JT_4_M_TRAINEE,
JT_4_F_ARUNA_POP,
JT_4_M_ARUNA_NFM1,
JT_4_DST_CAMEL,
JT_4_DST_SOLDIER,
JT_4_F_DESERT,
JT_4_F_DST_CHILD,
JT_4_F_DST_GRAND,
JT_4_M_DESERT,
JT_4_M_DST_CHILD,
JT_4_M_DST_GRAND,
JT_4_M_DST_MASTER,
JT_4_M_DST_TOUGH,
JT_4_ANGELING,
JT_4_ARCHANGELING,
JT_4_GHOSTRING,
JT_4_F_EDEN_MASTER,
JT_4_F_EDEN_OFFICER,
JT_4_M_EDEN_GUARDER,
JT_4_M_PATRICK,
JT_4_DONKEY,
JT_4_M_TRISTAN,
JT_4_WHITE_COW,
JT_4_F_RUSCHILD,
JT_4_F_RUSWOMAN1,
JT_4_F_RUSWOMAN2,
JT_4_F_RUSWOMAN3,
JT_4_M_RUSCHILD,
JT_4_M_GUSLIMAN,
JT_4_M_RUSBALD,
JT_4_M_RUSKING,
JT_4_M_RUSKNIGHT,
JT_4_M_RUSMAN1,
JT_4_M_RUSMAN2,
JT_4_M_DRAKE,
JT_4_F_BABAYAGA,
JT_4_F_RUSGREEN,
JT_4_RUS_DWOLF,
JT_1_FLAG_LION,
JT_1_FLAG_EAGLE,
JT_4_M_MIKID,
JT_4_BLUE_FLOWER,
JT_4_RED_FLOWER,
JT_4_YELL_FLOWER,
JT_4_F_CAVE1,
JT_4_F_MUT1,
JT_4_F_MUT2,
JT_4_F_SCIENCE,
JT_4_M_1STPRIN1,
JT_4_M_1STPRIN2,
JT_4_M_2NDPRIN1,
JT_4_M_2NDPRIN2,
JT_4_M_3RDPRIN1,
JT_4_M_3RDPRIN2,
JT_4_M_4THPRIN1,
JT_4_M_4THPRIN2,
JT_4_M_5THPRIN1,
JT_4_M_5THPRIN2,
JT_4_M_6THPRIN1,
JT_4_M_6THPRIN2,
JT_4_M_CASMAN1,
JT_4_M_CAVE1,
JT_4_M_MOCASS1,
JT_4_M_MOCASS2,
JT_4_M_MUT1,
NPC_RANGE2_END, // Official JT_MON_BEGIN
NPC_RANGE3_START = 10000, // Official JT_NEW_NPC_3RD_BEGIN
JT_4_TOWER_14,
JT_4_TOWER_15,
JT_4_TOWER_16,
JT_4_TOWER_17,
JT_4_TREASURE_BOX,
JT_ACADEMY_MASTER,
JT_PORTAL,
JT_THANATOS_BATTLE,
JT_THANATOS_KEEP,
JT_4_F_LYDIA,
JT_4_LUDE,
JT_4_ALIZA,
JT_4_ALICE,
JT_4_ARCHER_SKEL,
JT_4_JACK,
JT_4_SOLDIER_SKEL,
JT_4_LOLI_RURI,
JT_4_M_SAKRAY_TIED,
JT_4_M_ANTONIO,
JT_4_M_COOKIE,
JT_4_M_BELIEVER01,
JT_4_F_BELIEVER01,
JT_4_M_BELIEVER02,
JT_4_ROPEPILE,
JT_4_BRICKPILE,
JT_4_WOODPILE,
JT_4_M_TAMARIN,
JT_4_M_DEATH,
JT_4_GHOST_STAND,
JT_4_GHOST_COLLAPSE,
JT_4_COOKIEHOUSE,
JT_4_F_SKULL06GIRL,
JT_4_NONMYSTCASE,
JT_4_F_KIMI,
JT_4_M_FROZEN_GC,
JT_4_M_FROZEN_KN,
JT_4_SNAKE_LORD,
JT_4_F_MOCBOY,
JT_4_F_RUNAIN,
JT_4_M_ROEL,
JT_4_F_SHALOSH,
JT_4_ENERGY_RED,
JT_4_ENERGY_BLUE,
JT_4_ENERGY_YELLOW,
JT_4_ENERGY_BLACK,
JT_4_ENERGY_WHITE,
JT_4_F_PERE01,
JT_4_JITTERBUG,
JT_4_SEA_OTTER,
JT_4_GALAPAGO,
JT_4_DESERTWOLF_B,
JT_4_BB_PORING,
JT_4_F_CHARLESTON01,
JT_4_F_CHARLESTON02,
JT_4_F_CHARLESTON03,
JT_4_M_IAN,
JT_4_M_OLDSCHOLAR,
JT_4_F_LAPERM,
JT_4_M_DEBON,
JT_4_M_BIRMAN,
JT_4_F_SHAM,
JT_4_M_REBELLION,
JT_4_F_REBELLION,
JT_4_CHN_SHAOTH,
JT_4_SHOAL,
JT_4_F_SARAH,
JT_4_GIGANTES_BIG,
JT_4_GIGANTES,
JT_4_GIGANTES_SMALL,
JT_4_GARGOYLE_STATUE,
JT_4_AIRA,
JT_4_EZELLA,
JT_4_KULUNA,
JT_4_LUNE,
JT_4_MALLINA,
JT_4_MORIN,
JT_4_NASARIN,
JT_4_F_BERRYTEA,
JT_4_F_FRUIT,
JT_4_SCR_MT_ROBOTS,
JT_4_MACHINE_DEVICE,
JT_4_GC109,
JT_4_SYS_MSG,
JT_4_M_TATIO,
JT_4_M_REKENBER,
JT_4_XMAS_CAT1,
JT_4_XMAS_CAT2,
JT_4_XMAS_CAT3,
JT_4_XMAS_CAT4,
JT_4_XMAS_CAT5,
JT_4_XMAS_CAT6,
JT_4_M_DEATH2,
JT_4_S_KADOMATSU,
JT_4_B_KADOMATSU,
JT_4_F_08,
JT_4_F_08_STATUE,
JT_4_M_DARKPRIEST,
JT_4_JP_GARM_H,
JT_4_JP_MEDUSA_H,
JT_4_CHN_GVG_01,
JT_4_SPRING_RABBIT,
JT_4_PD_TYRA,
JT_4_PD_TYRANOS,
JT_4_PD_PLESI,
JT_4_PD_PLESIO,
JT_4_PD_BRACHI,
JT_4_PD_BRACHIOS,
JT_4_PD_GOLDDRAGON,
JT_4_PD_ZAEROG,
JT_4_PD_TAMADORA,
JT_4_JP_EDGA_H,
JT_4_JP_BRAGOLEM_H,
JT_4_EL_AQUA,
JT_4_EP16_NIHIL,
JT_4_EP16_SPICA,
JT_4_EP16_SKIA,
JT_4_EP16_PETER,
JT_4_EP16_CRUX,
JT_4_EP16_GRANZ,
JT_4_EP16_STOLZ,
JT_4_EP16_EGEO,
JT_4_EP16_COOK,
JT_4_EP16_MARK,
JT_4_EP16_TAMARIN,
JT_4_EP16_POE,
JT_4_EP16_ISAAC,
JT_4_EP16_HELMUT,
JT_4_EP16_WOLF,
JT_4_EP16_MEYER,
JT_4_EP16_AGNES,
JT_4_EP16_FOOD,
JT_4_EP16_LOUVIERE,
JT_4_EP16_MAX,
JT_4_EP16_SPIEGEL,
JT_4_MOONLIGHT,
JT_4_MISTRESS,
JT_4_DRACULA,
JT_4_STORMKNIGHT,
JT_4_TATTER,
JT_4_AS_RAGGED_GOLEM,
JT_4_AS_BLOODY_KNIGHT,
JT_4_AS_WIND_GHOST,
JT_4_F_BIJOU,
JT_4_EP16_COOK2,
JT_4_SERVICE_30_M_01,
JT_4_SERVICE_30_F_01,
JT_4_SCR_AT_ROBOTS,
JT_4_F_RANGER,
JT_4_WAG,
JT_4_NPC_TRAP,
JT_4_RAGGLER,
JT_4_DR_PEPE,
JT_4_DR_GAMBERI,
JT_4_DR_AGLIO,
JT_4_DR_OLIO,
JT_4_DR_STELO,
JT_4_DR_TORTEL,
JT_4_BASIL_SLAVE,
JT_4_DOU_JINDO,
JT_4_DOU_SIBA,
JT_4_TARUTUPI,
JT_4_DR_SOLDIER,
JT_4_DR_M_01,
JT_4_DR_M_02,
JT_4_DR_F_01,
JT_4_DR_F_02,
JT_4_DR_KID_01,
JT_4_JP_2015EVT,
JT_4_ALLIGATOR,
JT_4_ANOLIAN,
JT_4_TACNU,
JT_4_CENERE,
JT_4_F_ARUNA_POP2,
JT_4_JACK_HEAD,
JT_4_INJUSTICE,
JT_4_BLOODYMAN,
JT_4_GIBBET,
JT_4_DULLAHAN,
JT_4_M_LAZY,
JT_4_M_GONY,
JT_4_M_ROOKIE,
JT_4_M_PHILOFONTES,
JT_4_F_ESTLOVELOY,
JT_4_F_LEEDSH,
JT_4_F_DIENE,
JT_4_F_COATNEIS,
JT_4_M_RUPERT,
JT_4_M_FALLENGONY,
JT_4_M_EISEN,
JT_4_F_DEADEVIL,
JT_4_F_HUNTER_EVIL,
JT_4_F_ELENA,
JT_4_F_ANYA,
JT_4_M_SEIREN_UC,
JT_4_M_GUNSLINGER2,
JT_4_M_GUNSLINGER3,
JT_4_M_REBELLION2,
JT_4_M_REBELLION3,
JT_4_F_GUNSLINGER2,
JT_4_F_GUNSLINGER3,
JT_4_F_REBELLION2,
JT_4_F_REBELLION3,
JT_4_M_ILYA,
JT_4_ELDER = 10205,
JT_4_LUNATIC,
JT_4_F_NOVICE2,
JT_4_WICKEDNYMPH,
JT_4_F_PREMI,
JT_4_M_COSTELL,
JT_4_M_YATTWARP,
JT_4_M_EVOKASCUDI,
JT_4_M_JOHNNYJAMES,
JT_4_M_ALBERTFORD,
JT_4_M_SEANMCCURDY,
JT_4_M_KARAMPUCCI,
JT_4_M_CACTUSMAN1,
JT_4_M_CACTUSMAN2,
JT_4_M_CACTUSMAN3,
JT_4_M_CACTUSLADY,
JT_4_M_GAST,
JT_4_M_CACTUSCHILD,
JT_4_KING,
JT_4_F_BOMI,
JT_4_M_CACTUSCHIEF,
JT_4_F_CACTUSCHILD2,
JT_4_F_CACTUSLADY2,
JT_4_F_CACTUSLADY3,
JT_4_M_CACTUS,
JT_4_M_COWRAIDERS1,
JT_4_M_COWRAIDERS2,
JT_4_M_COWRAIDERS3,
JT_4_F_JP14THEVT,
JT_4_M_POORSCHOLAR,
JT_4_M_PEPPERROTI,
JT_JP_NPC01,
JT_4_PURPLE_WARP,
JT_4_F_NARIN,
JT_4_M_URGENT_MAN,
JT_4_M_KEEN_SOLDIER,
JT_4_F_SLOPPY_WOMAN,
JT_4_F_DRKAFRA01,
JT_4_M_DRZONDA01,
JT_4_M_SWD_RENO,
JT_4_M_KNG_RENO,
JT_4_M_AC_RUMIN,
JT_4_M_HIGH_WIZARD,
JT_4_SYSTEM_BOX,
JT_4_STEELBOX,
JT_4_WOODBOX,
JT_4_M_POPFESTA,
JT_4_BONFIRE,
JT_4_PCCOUNT,
JT_4_LAVAGOLEM,
JT_JP_NPC02 = 10261,
JT_JP_NPC03,
JT_JP_NPC04,
JT_JP_NPC05,
JT_JP_NPC06,
JT_JP_NPC07,
JT_JP_NPC08,
JT_JP_NPC09,
JT_JP_NPC10,
JT_4_SCATLETON = 10271,
JT_4_JP_AB_NPC_001,
JT_4_JP_AB_NPC_002,
JT_4_JP_AB_NPC_003,
JT_4_JP_AB_NPC_004,
JT_4_JP_AB_NPC_005,
JT_4_JP_AB_NPC_006,
JT_4_JP_AB_NPC_007,
JT_4_JP_AB_NPC_008,
JT_4_JJAK,
NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999
// Unofficial
JT_INVISIBLE = 32767,
JT_FAKENPC = -1
};
// Old NPC range
#define MAX_NPC_CLASS 1000
#define MAX_NPC_CLASS NPC_RANGE2_END
// New NPC range
#define MAX_NPC_CLASS2_START 10000
#define MAX_NPC_CLASS2_END 10281
#define MAX_NPC_CLASS2_START NPC_RANGE3_START
#define MAX_NPC_CLASS2_END NPC_RANGE3_END
//Checks if a given id is a valid npc id. [Skotlex]
//Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
#define npcdb_checkid(id) ( ( (id) >= 46 && (id) <= 125) || (id) == HIDDEN_WARP_CLASS || ( (id) > 400 && (id) < MAX_NPC_CLASS ) || (id) == INVISIBLE_CLASS || ( id > MAX_NPC_CLASS2_START && id < MAX_NPC_CLASS2_END ) )
#define npcdb_checkid(id) ( ( (id) > NPC_RANGE1_START && (id) < NPC_RANGE1_END ) || (id) == JT_HIDDEN_WARP_NPC || ( (id) > NPC_RANGE2_START && (id) < NPC_RANGE2_END ) || (id) == JT_INVISIBLE || ( id > NPC_RANGE3_START && id < NPC_RANGE3_END ) )
#ifdef PCRE_SUPPORT
void npc_chat_finalize(struct npc_data* nd);

View File

@ -1521,7 +1521,7 @@ void pc_reg_received(struct map_session_data *sd)
}
if( pc_isinvisible(sd) ) {
sd->vd.class_ = INVISIBLE_CLASS;
sd->vd.class_ = JT_INVISIBLE;
clif_displaymessage( sd->fd, msg_txt( sd, 11 ) ); // Invisible: On
// decrement the number of pvp players on the map
map[sd->bl.m].users_pvp--;

View File

@ -14006,6 +14006,13 @@ BUILDIN_FUNC(misceffect)
int type;
type=script_getnum(st,2);
if( type <= EF_NONE || type >= EF_MAX ){
ShowError( "buildin_misceffect: unsupported effect id %d\n", type );
return SCRIPT_CMD_FAILURE;
}
if(st->oid && st->oid != fake_nd->bl.id) {
struct block_list *bl = map_id2bl(st->oid);
if (bl)
@ -14369,6 +14376,11 @@ BUILDIN_FUNC(specialeffect)
if(bl==NULL)
return SCRIPT_CMD_SUCCESS;
if( type <= EF_NONE || type >= EF_MAX ){
ShowError( "buildin_specialeffect: unsupported effect id %d\n", type );
return SCRIPT_CMD_FAILURE;
}
if( script_hasdata(st,4) )
{
TBL_NPC *nd = npc_name2id(script_getstr(st,4));
@ -14396,6 +14408,11 @@ BUILDIN_FUNC(specialeffect2)
int type = script_getnum(st,2);
enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA;
if( type <= EF_NONE || type >= EF_MAX ){
ShowError( "buildin_specialeffect2: unsupported effect id %d\n", type );
return SCRIPT_CMD_FAILURE;
}
clif_specialeffect(&sd->bl, type, target);
}
return SCRIPT_CMD_SUCCESS;
@ -14507,7 +14524,7 @@ int recovery_sub(struct map_session_data* sd, int revive)
if(revive&(1|4) && pc_isdead(sd)) {
status_revive(&sd->bl, 100, 100);
clif_displaymessage(sd->fd,msg_txt(sd,16)); // You've been revived!
clif_specialeffect(&sd->bl, 77, AREA);
clif_specialeffect(&sd->bl, EF_RESURRECTION, AREA);
} else if(revive&(1|2) && !pc_isdead(sd)) {
status_percent_heal(&sd->bl, 100, 100);
clif_displaymessage(sd->fd,msg_txt(sd,680)); // You have been recovered!
@ -15238,7 +15255,7 @@ BUILDIN_FUNC(summon)
delete_timer(md->deletetimer, mob_timer_delete);
md->deletetimer = add_timer(tick+(timeout>0?timeout:60000),mob_timer_delete,md->bl.id,0);
mob_spawn (md); //Now it is ready for spawning.
clif_specialeffect(&md->bl,344,AREA);
clif_specialeffect(&md->bl,EF_ENTRY2,AREA);
sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
}
script_pushint(st, md->bl.id);
@ -16410,7 +16427,7 @@ BUILDIN_FUNC(setnpcdisplay)
{
const char* name;
const char* newname = NULL;
int class_ = -1, size = -1;
int class_ = JT_FAKENPC, size = -1;
struct script_data* data;
struct npc_data* nd;
@ -16450,7 +16467,7 @@ BUILDIN_FUNC(setnpcdisplay)
else
size = -1;
if( class_ != -1 && nd->class_ != class_ )
if( class_ != JT_FAKENPC && nd->class_ != class_ )
npc_setclass(nd, class_);
else if( size != -1 )
{ // Required to update the visual size
@ -22571,6 +22588,11 @@ BUILDIN_FUNC(hateffect){
effectID = script_getnum(st,2);
enable = script_getnum(st,3) ? true : false;
if( effectID <= HAT_EF_MIN || effectID >= HAT_EF_MAX ){
ShowError( "buildin_hateffect: unsupported hat effect id %d\n", effectID );
return SCRIPT_CMD_FAILURE;
}
ARR_FIND( 0, sd->hatEffectCount, i, sd->hatEffectIDs[i] == effectID );
if( enable ){

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2713,7 +2713,7 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
) {
// Kaite only works against non-players if they are low-level.
// Kyomu doesn't disable Kaite, but the "skill fail chance" part of Kyomu applies to it.
clif_specialeffect(bl, 438, AREA);
clif_specialeffect(bl, EF_ATTACKENERGY2, AREA);
if( --sc->data[SC_KAITE]->val2 <= 0 )
status_change_end(bl, SC_KAITE, INVALID_TIMER);
return 2;
@ -8602,7 +8602,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
}
status_zap(src,0,skill_get_sp(skill_id,skill_lv)); // consume sp only if succeeded [Inkfish]
card = skill_tarotcard(src, bl, skill_id, skill_lv, tick); // actual effect is executed here
clif_specialeffect((card == 6) ? src : bl, 522 + card, AREA);
clif_specialeffect((card == 6) ? src : bl, EF_TAROTCARD1 + card - 1, AREA);
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
}
break;
@ -8631,7 +8631,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
{ //Erase death count 1% of the casts
dstsd->die_counter = 0;
pc_setglobalreg(dstsd, add_str("PC_DIE_COUNTER"), 0);
clif_specialeffect(bl, 0x152, AREA);
clif_specialeffect(bl, EF_ANGEL2, AREA);
//SC_SPIRIT invokes status_calc_pc for us.
}
clif_skill_nodamage(src,bl,skill_id,skill_lv,
@ -19300,7 +19300,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
break;
default: //Those that don't require a skill?
if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20) { //Cooking items.
clif_specialeffect(&sd->bl, 608, AREA);
clif_specialeffect(&sd->bl, EF_COOKING_OK, AREA);
if (sd->cook_mastery < 1999)
pc_setglobalreg(sd, add_str("COOK_MASTERY"), sd->cook_mastery + ( 1 << ( (skill_produce_db[idx].itemlv - 11) / 2 ) ) * 5);
}
@ -19412,7 +19412,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
break;
default:
if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 ) { //Cooking items.
clif_specialeffect(&sd->bl, 609, AREA);
clif_specialeffect(&sd->bl, EF_COOKING_FAIL, AREA);
if (sd->cook_mastery > 0)
pc_setglobalreg(sd, add_str("COOK_MASTERY"), sd->cook_mastery - ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 ));
}

View File

@ -7610,7 +7610,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
nullpo_retv(bl);
if (mobdb_checkid(class_) || mob_is_clone(class_))
vd = mob_get_viewdata(class_);
else if (npcdb_checkid(class_) || (bl->type == BL_NPC && class_ == WARP_CLASS))
else if (npcdb_checkid(class_))
vd = npc_get_viewdata(class_);
else if (homdb_checkid(class_))
vd = hom_get_viewdata(class_);

View File

@ -2759,31 +2759,6 @@ int unit_counttargeted(struct block_list* bl)
return 0;
}
/**
* Changes the size of a unit
* @param bl: Object to change size [PC|MOB]
* @param size: New size of bl
* @return 0
*/
int unit_changeviewsize(struct block_list *bl,short size)
{
nullpo_ret(bl);
size = (size < 0) ? -1 : (size > 0) ? 1 : 0;
if(bl->type == BL_PC)
((TBL_PC*)bl)->state.size = size;
else if(bl->type == BL_MOB)
((TBL_MOB*)bl)->special_state.size = size;
else
return 0;
if(size != 0)
clif_specialeffect(bl,421+size, AREA);
return 0;
}
/**
* Makes 'bl' that attacking 'src' switch to attack 'target'
* @param bl