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 ---- 1475: ---- My Channels ----
1476: You have not joined any 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 // @partysharelvl
1478: Party share level range has been changed successfully. 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: ================================================== //===== By: ==================================================
//= rAthena Dev Team //= rAthena Dev Team
//===== Last Updated: ======================================== //===== Last Updated: ========================================
//= 20160313 //= 20171011
//===== Description: ========================================= //===== Description: =========================================
//= List of available atcommands and their functions. //= List of available atcommands and their functions.
//============================================================ //============================================================
@ -226,14 +226,24 @@ New warp NPC 'my_warp_sample' created.
@effect <effect ID> @effect <effect ID>
Creates a visual effect on or around the character. Creates a visual effect on or around the character.
A list of IDs can be found in '/db/const.txt'. A list of IDs and descriptions of the effects can be found in '/doc/effect_list.txt'.
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: ================================================== //===== By: ==================================================
//= rAthena Dev Team //= rAthena Dev Team
//===== Last Updated: ======================================== //===== Last Updated: ========================================
//= 20120822 //= 20171011
//===== Description: ========================================= //===== Description: =========================================
//= A list of client-side effects sorted by ID. //= 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 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). 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. 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'. It's also possible to attach effects to item/npc scripts by using 'misceffect'.
Number Description Number Description

View File

@ -3,7 +3,7 @@
//===== By:================================================== //===== By:==================================================
//= rAthena Dev Team //= rAthena Dev Team
//===== Last Updated:======================================== //===== Last Updated:========================================
//= 20161206 //= 20171011
//===== Description:========================================= //===== Description:=========================================
//= A reference manual for the rAthena scripting language. //= A reference manual for the rAthena scripting language.
//= Commands are sorted depending on their functionality. //= Commands are sorted depending on their functionality.
@ -7343,7 +7343,7 @@ Example:
bindatcmd "test",strnpcinfo(3) + "::OnAtcommand"; bindatcmd "test",strnpcinfo(3) + "::OnAtcommand";
end; end;
OnAtcommand: OnAtcommand:
specialeffect2 338; specialeffect2 EF_ANGEL2;
end; 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 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. 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. Requires client 2015-05-13aRagEXE or newer.

View File

@ -62,9 +62,9 @@ M_INFO:
OnInit: OnInit:
//559,Hand-made_Chocolate //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 //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; } //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; } }"; 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: OnInit:
//Santa's Hat //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 //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);} }"; 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 //Silver Xmas Ring

View File

@ -183,12 +183,13 @@ OnTimer2500:
.@r = rand(0,1); .@r = rand(0,1);
if (.@r != 0 ) { stopnpctimer; initnpctimer; end; } if (.@r != 0 ) { stopnpctimer; initnpctimer; end; }
stopnpctimer; stopnpctimer;
specialeffect .effects[rand(0,18)],AREA,instance_npcname(strnpcinfo(0)); specialeffect .effects[rand(getarraysize(.effects))],AREA,instance_npcname(strnpcinfo(0));
initnpctimer; initnpctimer;
end; end;
OnInit: 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); hideonnpc strnpcinfo(0);
end; end;
@ -2289,7 +2290,7 @@ OnEnd:
mes "Enjoy."; mes "Enjoy.";
mes "Good luck on the next round!"; mes "Good luck on the next round!";
percentheal 100,100; percentheal 100,100;
specialeffect2 312; specialeffect2 EF_HEAL;
close2; close2;
hideonnpc instance_npcname("Tournament Healer#1"); // 83649 hideonnpc instance_npcname("Tournament Healer#1"); // 83649
end; end;
@ -2303,13 +2304,13 @@ end;
OnStart: OnStart:
initnpctimer; initnpctimer;
for ( .@i = 11; .@i <= 20; .@i++ ) { 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; end;
OnTimer6000: OnTimer6000:
initnpctimer; initnpctimer;
for ( .@i = 0; .@i < 5; .@i++) { 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; end;
@ -2319,23 +2320,23 @@ OnTurn:
OnWin: OnWin:
for ( .@i = 1; .@i <= 5; .@i++ ) { 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; sleep 3000;
for ( .@i = 1; .@i <= 5; .@i++ ) { 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; sleep 500;
for ( .@i = 1; .@i <= 5; .@i++ ){ 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; sleep 3000;
for ( .@i = 1; .@i <= 5; .@i++ ) { for ( .@i = 1; .@i <= 5; .@i++ ) {
specialeffect 237, AREA, instance_npcname("#fireworks_f" + .@i); specialeffect EF_VIOLENTGALE, AREA, instance_npcname("#fireworks_f" + .@i);
} }
end; end;
OnInstanceInit: OnInstanceInit:
setarray .effect, 30, 89, 92; setarray .effect, EF_THUNDERSTORM, EF_STORMGUST, EF_METEORSTORM;
end; end;
} }
@ -4098,9 +4099,9 @@ OnTimer1000:
switch('gmt_timer_evt1) { switch('gmt_timer_evt1) {
case 1: case 1:
specialeffect 220, AREA, instance_npcname("Geffen Gangster#1"); specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 220, AREA, instance_npcname("Geffen Gangster#2"); specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 220, AREA, instance_npcname("Geffen Gangster#3"); 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 : 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 : We should stop playing around...", instance_npcname("Geffen Gangster#2");
npctalk "Geffen Gangster : You're gonna pay the price!", instance_npcname("Geffen Gangster#3"); npctalk "Geffen Gangster : You're gonna pay the price!", instance_npcname("Geffen Gangster#3");
@ -4112,7 +4113,7 @@ OnTimer1000:
break; break;
case 8: npctalk "Iris : That's enough.", instance_npcname("Iris#Gef1"); 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 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: case 14:
npctalk "Geffen Gangster : Why hello there, are you scared?", instance_npcname("Geffen Gangster#1"); 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"); 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; break;
case 22: mapannounce instance_mapname("1@gef"), "Stop right there! Jerks!", 0x00ebff; break; case 22: mapannounce instance_mapname("1@gef"), "Stop right there! Jerks!", 0x00ebff; break;
case 23: hideoffnpc instance_npcname("Chaos#Gef1"); 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 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 30: npctalk "Chaos : I think I need to teach someone a lesson!", instance_npcname("Chaos#Gef1"); break;
case 31: case 31:
specialeffect 60, AREA, instance_npcname("Geffen Gangster#11"); specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#11");
specialeffect 60, AREA, instance_npcname("Geffen Gangster#22"); specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#22");
specialeffect 60, AREA, instance_npcname("Geffen Gangster#33"); specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#33");
npctalk "Chaos : Come and fight me!", instance_npcname("Chaos#Gef2"); npctalk "Chaos : Come and fight me!", instance_npcname("Chaos#Gef2");
hideonnpc instance_npcname("Chaos#Gef1"); hideonnpc instance_npcname("Chaos#Gef1");
hideoffnpc instance_npcname("Chaos#Gef2"); hideoffnpc instance_npcname("Chaos#Gef2");
break; break;
case 34: case 34:
npctalk "Chaos : Bash~!!!", instance_npcname("Chaos#Gef2"); npctalk "Chaos : Bash~!!!", instance_npcname("Chaos#Gef2");
specialeffect 1, AREA, instance_npcname("Chaos#Gef2"); specialeffect EF_HIT2, AREA, instance_npcname("Chaos#Gef2");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#11"); specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#11");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#22"); specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#22");
specialeffect 16, AREA, instance_npcname("Geffen Gangster#33"); specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#33");
hideonnpc instance_npcname("Geffen Gangster#11"); hideonnpc instance_npcname("Geffen Gangster#11");
hideonnpc instance_npcname("Geffen Gangster#22"); hideonnpc instance_npcname("Geffen Gangster#22");
hideonnpc instance_npcname("Geffen Gangster#33"); hideonnpc instance_npcname("Geffen Gangster#33");
@ -4165,14 +4166,14 @@ OnTimer1000:
break; break;
case 42: case 42:
npctalk "Chaos : I'm not done yet!! Magnum Break~!", instance_npcname("Chaos#3"); npctalk "Chaos : I'm not done yet!! Magnum Break~!", instance_npcname("Chaos#3");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#1"); specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#2"); specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 17, AREA, instance_npcname("Geffen Gangster#3"); specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#3");
break; break;
case 43: case 43:
specialeffect 183, AREA, instance_npcname("Geffen Gangster#1"); specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#1");
specialeffect 183, AREA, instance_npcname("Geffen Gangster#2"); specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#2");
specialeffect 183, AREA, instance_npcname("Geffen Gangster#3"); specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#3");
hideonnpc instance_npcname("Geffen Gangster#1"); hideonnpc instance_npcname("Geffen Gangster#1");
hideonnpc instance_npcname("Geffen Gangster#2"); hideonnpc instance_npcname("Geffen Gangster#2");
hideonnpc instance_npcname("Geffen Gangster#3"); hideonnpc instance_npcname("Geffen Gangster#3");
@ -4314,7 +4315,7 @@ OnTimer1000:
case 9: case 9:
unittalk 'gmt_account_id, "I have to help!"; unittalk 'gmt_account_id, "I have to help!";
attachrid 'gmt_account_id; attachrid 'gmt_account_id;
specialeffect2 60; specialeffect2 EF_LOCKON;
detachrid; detachrid;
monster instance_mapname("1@gef"), 75, 172, "Geffen Bully", 2567, 1, instance_npcname("#Event 2 start 2") + "::OnMobKilled"; 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"; 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; //completequest 9286;
//setquest 9287; //setquest 9287;
sleep2 500; sleep2 500;
specialeffect 220, AREA, instance_npcname("Geffen Bully#1"); specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#1");
specialeffect 220, AREA, instance_npcname("Geffen Bully#2"); specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#2");
specialeffect 220, AREA, instance_npcname("Geffen Bully#3"); specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#3");
$gmt_timer_evt2 = -1; $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 10: npctalk "Fenrir : This is really uncomfortable. I can't just sit back and watch.", instance_npcname("Fenrir#1"); break;
case 13: case 13:
npctalk "Fenrir : Stop harassing her. I won't forgive you.", instance_npcname("Fenrir#1"); 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; 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 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; 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: case 25:
hideoffnpc instance_npcname("Loki#1"); hideoffnpc instance_npcname("Loki#1");
sleep2 500; sleep2 500;
specialeffect 126, AREA, instance_npcname("Loki#1"); specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#1");
sleep2 1500; sleep2 1500;
specialeffect 121, AREA, instance_npcname("Loki#1"); specialeffect EF_SONICBLOW, AREA, instance_npcname("Loki#1");
npctalk "Loki : Hmph!", instance_npcname("Loki#1"); npctalk "Loki : Hmph!", instance_npcname("Loki#1");
sleep2 500; sleep2 500;
specialeffect 124, AREA, instance_npcname("Loki#1"); specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#1");
specialeffect 122, AREA, instance_npcname("Geffen Bully#33"); specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#33");
specialeffect 143, AREA, instance_npcname("Geffen Bully#33"); specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#33");
sleep2 330; 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"); hideonnpc instance_npcname("Geffen Bully#33");
hideoffnpc instance_npcname("Geffen Bully#3"); hideoffnpc instance_npcname("Geffen Bully#3");
break; break;
@ -4404,11 +4405,11 @@ OnMobKilled:
sleep2 750; sleep2 750;
npctalk "Loki : Take this.", instance_npcname("Loki#2"); npctalk "Loki : Take this.", instance_npcname("Loki#2");
sleep2 500; sleep2 500;
specialeffect 271, AREA, instance_npcname("Geffen Bully#22"); specialeffect EF_STRIPARMOR, AREA, instance_npcname("Geffen Bully#22");
specialeffect 122, AREA, instance_npcname("Geffen Bully#22"); specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#22");
specialeffect 143, AREA, instance_npcname("Geffen Bully#22"); specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#22");
sleep2 330; 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"); hideonnpc instance_npcname("Geffen Bully#22");
hideoffnpc instance_npcname("Geffen Bully#2"); hideoffnpc instance_npcname("Geffen Bully#2");
break; break;
@ -4419,11 +4420,11 @@ OnMobKilled:
sleep2 750; sleep2 750;
npctalk "Loki : Change your mind yet?", instance_npcname("Loki#3"); npctalk "Loki : Change your mind yet?", instance_npcname("Loki#3");
sleep2 500; sleep2 500;
specialeffect 270, AREA, instance_npcname("Geffen Bully#11"); specialeffect EF_STRIPSHIELD, AREA, instance_npcname("Geffen Bully#11");
specialeffect 122, AREA, instance_npcname("Geffen Bully#11"); specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#11");
specialeffect 143, AREA, instance_npcname("Geffen Bully#11"); specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#11");
sleep2 330; 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"); hideonnpc instance_npcname("Geffen Bully#11");
hideoffnpc instance_npcname("Geffen Bully#1"); hideoffnpc instance_npcname("Geffen Bully#1");
break; break;
@ -4435,18 +4436,18 @@ OnMobKilled:
case 40: npctalk "Geffen Bully : Let's get away!~!!!!!", instance_npcname("Geffen Bully#3"); break; case 40: npctalk "Geffen Bully : Let's get away!~!!!!!", instance_npcname("Geffen Bully#3"); break;
case 41: case 41:
npctalk "Loki : You have 10 seconds.", instance_npcname("Loki#3"); 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; break;
case 43: 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"); npctalk "Loki : 10... 9...", instance_npcname("Loki#3");
sleep2 500; sleep2 500;
specialeffect 269, AREA, instance_npcname("Loki#3"); specialeffect EF_STRIPWEAPON, AREA, instance_npcname("Loki#3");
specialeffect 126, AREA, instance_npcname("Loki#3"); specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#3");
specialeffect 127, AREA, instance_npcname("Loki#3"); specialeffect EF_POISONREACT2, AREA, instance_npcname("Loki#3");
break; break;
case 45: case 45:
specialeffect 125, AREA, instance_npcname("Loki#3"); specialeffect EF_ENCHANTPOISON, AREA, instance_npcname("Loki#3");
sleep2 500; sleep2 500;
emotion e_gg, 0, instance_npcname("Loki#3"); emotion e_gg, 0, instance_npcname("Loki#3");
npctalk "Loki : 3... 2...", 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"); npctalk "Geffen Bully : I will have my revenge~!!", instance_npcname("Geffen Bully#3");
break; break;
case 46: case 46:
specialeffect 361, AREA, instance_npcname("Loki#3"); specialeffect EF_SOULBREAKER, AREA, instance_npcname("Loki#3");
specialeffect 124, AREA, instance_npcname("Loki#3"); specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#3");
npctalk "Loki : 1...", instance_npcname("Loki#3"); npctalk "Loki : 1...", instance_npcname("Loki#3");
sleep2 330; sleep2 330;
hideonnpc instance_npcname("Geffen Bully#1"); hideonnpc instance_npcname("Geffen Bully#1");
@ -4644,7 +4645,7 @@ OnTimer1000:
'gmt_timer_evt3++; 'gmt_timer_evt3++;
switch('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 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 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; 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 Magic properties by";
mes "their casting effect.^000000"; mes "their casting effect.^000000";
next; next;
setarray .@effect[0],56,54,225; setarray .@effect[0],EF_BEGINSPELL4,EF_BEGINSPELL2,EF_VOLCANO;
setarray .@color$[0],"Red","Yellow","Blue"; setarray .@color$[0],"Red","Yellow","Blue";
while(1) { while(1) {
if (.@roof0 > 7) break; if (.@roof0 > 7) break;
set .@i, rand(3); set .@i, rand(getarraysize(.@effect));
specialeffect .@effect[.@i]; specialeffect .@effect[.@i];
mes "^3355FFThe Gemstones must"; mes "^3355FFThe Gemstones must";
mes "be arranged in the correct"; mes "be arranged in the correct";

View File

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

View File

@ -3934,7 +3934,7 @@ lasagna,85,93,5 script Shaman meow#dorcon 4_DR_KID_01,{
mes "[Shaman meow]"; mes "[Shaman meow]";
mes "I'll tell you today's talisman. It is..."; mes "I'll tell you today's talisman. It is...";
next; next;
specialeffect 330; specialeffect EF_HITLINE;
mes "[Shaman meow]"; mes "[Shaman meow]";
.@quest_id = rand(14560,14562); .@quest_id = rand(14560,14562);
switch( .@quest_id ) { switch( .@quest_id ) {
@ -6910,7 +6910,7 @@ conch_in,181,61,5 script Boatswain#dorcon 4_M_BOSSCAT,{
next; next;
mes "[Boatswain]"; mes "[Boatswain]";
mes "This... This is..."; mes "This... This is...";
specialeffect 66; specialeffect EF_CURE;
next; next;
mes "[" + strcharinfo(0) + "]"; mes "[" + strcharinfo(0) + "]";
mes "What do you think?"; 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."; mes "This is the amulet for today! Give me all the Basilrocks you have.";
next; next;
mes "[Boatswain]"; mes "[Boatswain]";
specialeffect 66; specialeffect EF_CURE;
if (isbegin_quest(14560) == 1) { if (isbegin_quest(14560) == 1) {
mes "It feels like watching the blue horizon on a clear and windless day. It is refreshing."; mes "It feels like watching the blue horizon on a clear and windless day. It is refreshing.";
next; next;
@ -8228,7 +8228,7 @@ lasa_dun03,161,292,5 script Lord Imuk#dorcon 4_NFWISP,{
next; next;
mes "[???]"; mes "[???]";
mes "How dare you treat me like a ghost! I have lived for ^0000cd2,500 years^000000!"; mes "How dare you treat me like a ghost! I have lived for ^0000cd2,500 years^000000!";
specialeffect2 29; specialeffect2 EF_LIGHTBOLT;
next; next;
mes "[" + strcharinfo(0) + "]"; mes "[" + strcharinfo(0) + "]";
mes "Oww...that hurts. I'm sorry if I've offended you, but are you Imoogi, the chief of the Basilisk?"; 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) //ACMD_FUNC(newcommand)
//{ //{
// clif_displaymessage(fd, "It works!"); // clif_displaymessage(fd, "It works!");
// clif_specialeffect(&sd->bl, 343, AREA); // clif_specialeffect(&sd->bl, EF_HEARTCASTING, AREA);
// return 0; // 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); map_foreachinmovearea(clif_insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
} else { } else {
sd->sc.option |= OPTION_INVISIBLE; sd->sc.option |= OPTION_INVISIBLE;
sd->vd.class_ = INVISIBLE_CLASS; sd->vd.class_ = JT_INVISIBLE;
clif_displaymessage(fd, msg_txt(sd,11)); // Invisible: On clif_displaymessage(fd, msg_txt(sd,11)); // Invisible: On
// decrement the number of pvp players on the map // 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)) if (pl_sd->fd != fd && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
{ {
status_kill(&pl_sd->bl); 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. 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)) 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); 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. 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) ACMD_FUNC(effect)
{ {
int type = 0, flag = 0; int type = EF_NONE;
nullpo_retr(-1, sd); nullpo_retr(-1, sd);
if (!message || !*message || sscanf(message, "%11d", &type) < 1) { if (!message || !*message || sscanf(message, "%11d", &type) < 1) {
@ -5308,7 +5308,13 @@ ACMD_FUNC(effect)
return -1; 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. clif_displaymessage(fd, msg_txt(sd,229)); // Your effect has changed.
return 0; return 0;
} }
@ -6816,7 +6822,7 @@ ACMD_FUNC(summon)
md->master_id=sd->bl.id; md->master_id=sd->bl.id;
md->special_state.ai=AI_ATTACK; md->special_state.ai=AI_ATTACK;
md->deletetimer=add_timer(tick+(duration*60000),mob_timer_delete,md->bl.id,0); 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); mob_spawn(md);
sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000); 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); 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_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100); status_percent_heal(&hd->bl, 100, 100);
clif_specialeffect(&hd->bl,568,AREA); clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
return 0; return 0;
} }
@ -7996,9 +8002,9 @@ ACMD_FUNC(size)
sd->state.size = size; sd->state.size = size;
if( size == SZ_MEDIUM ) if( size == SZ_MEDIUM )
clif_specialeffect(&sd->bl,420,AREA); clif_specialeffect(&sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG ) 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. clif_displaymessage(fd, msg_txt(sd,1303)); // Size change applied.
return 0; return 0;
@ -8023,9 +8029,9 @@ ACMD_FUNC(sizeall)
pl_sd->state.size = size; pl_sd->state.size = size;
if( size == SZ_MEDIUM ) if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA); clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG ) else if( size == SZ_BIG )
clif_specialeffect(&pl_sd->bl,422,AREA); clif_specialeffect(&pl_sd->bl,EF_GIANTBODY,AREA);
} }
} }
mapit_free(iter); mapit_free(iter);
@ -8065,9 +8071,9 @@ ACMD_FUNC(sizeguild)
pl_sd->state.size = size; pl_sd->state.size = size;
if( size == SZ_MEDIUM ) if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA); clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
else if( size == SZ_BIG ) 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. //Kaupe blocks damage (skill or otherwise) from players, mobs, homuns, mercenaries.
if ((sce = sc->data[SC_KAUPE]) && rnd()%100 < sce->val2) { 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. //Shouldn't end until Breaker's non-weapon part connects.
#ifndef RENEWAL #ifndef RENEWAL
if (skill_id != ASC_BREAKER || !(flag&BF_WEAPON)) 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 #endif
if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rnd()%100 < sce->val2) { 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; return 0;
} }
@ -1185,7 +1185,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if (!status_isdead(src)) if (!status_isdead(src))
skill_counter_additional_effect( src, bl, skill_id, skill_lv, flag, gettick() ); skill_counter_additional_effect( src, bl, skill_id, skill_lv, flag, gettick() );
if (sce) { if (sce) {
clif_specialeffect(bl, 462, AREA); clif_specialeffect(bl, EF_STORMKICK4, AREA);
skill_blown(src,bl,sce->val3,-1,BLOWN_NONE); skill_blown(src,bl,sce->val3,-1,BLOWN_NONE);
} }
//Both need to be consumed if they are active. //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) { 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); sce->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
if (sce->val3 >= 0) if (sce->val3 >= 0)
damage = 0; damage = 0;
@ -2369,7 +2369,7 @@ static bool is_attack_critical(struct Damage wd, struct block_list *src, struct
case 0: case 0:
if(sc && !sc->data[SC_AUTOCOUNTER]) if(sc && !sc->data[SC_AUTOCOUNTER])
break; break;
clif_specialeffect(src, 131, AREA); clif_specialeffect(src, EF_AUTOCOUNTER, AREA);
status_change_end(src, SC_AUTOCOUNTER, INVALID_TIMER); status_change_end(src, SC_AUTOCOUNTER, INVALID_TIMER);
case KN_AUTOCOUNTER: case KN_AUTOCOUNTER:
if(battle_config.auto_counter_type && 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,24) = vd->head_top;
WBUFW(buf,26) = vd->head_mid; 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? { //The hell, why flags work like this?
WBUFW(buf,22) = status_get_emblem_id(bl); WBUFW(buf,22) = status_get_emblem_id(bl);
WBUFW(buf,24) = GetWord(status_get_guild_id(bl), 1); 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) || map[m].flag.clouds2)
{ {
if (map[m].flag.snow) 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) 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) 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) 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) { if (map[m].flag.fireworks) {
clif_specialeffect_single(&sd->bl, 297, fd); clif_specialeffect_single(&sd->bl, EF_POKJUK, fd);
clif_specialeffect_single(&sd->bl, 299, fd); clif_specialeffect_single(&sd->bl, EF_THROWITEM2, fd);
clif_specialeffect_single(&sd->bl, 301, fd); clif_specialeffect_single(&sd->bl, EF_POKJUK_SOUND, fd);
} }
if (map[m].flag.sakura) 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) 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; int len;
vd = status_get_viewdata(bl); vd = status_get_viewdata(bl);
if( !vd || vd->class_ == INVISIBLE_CLASS ) if( !vd || vd->class_ == JT_INVISIBLE )
return 0; return 0;
/** /**
@ -1443,9 +1443,9 @@ int clif_spawn(struct block_list *bl)
if (sd->spiritball > 0) if (sd->spiritball > 0)
clif_spiritball(&sd->bl); clif_spiritball(&sd->bl);
if(sd->state.size==SZ_BIG) // tiny/big players [Valaris] 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) 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 ) if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd); clif_sendbgemblem_area(sd);
if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0) 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); TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris] 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) else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA); clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
} }
break; break;
case BL_NPC: case BL_NPC:
{ {
TBL_NPC *nd = ((TBL_NPC*)bl); TBL_NPC *nd = ((TBL_NPC*)bl);
if( nd->size == SZ_BIG ) if( nd->size == SZ_BIG )
clif_specialeffect(&nd->bl,423,AREA); clif_specialeffect(&nd->bl,EF_GIANTBODY2,AREA);
else if( nd->size == SZ_MEDIUM ) 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_efst_status_change_sub(bl, bl, AREA);
clif_progressbar_npc_area(nd); 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); TBL_PC *sd = ((TBL_PC*)bl);
// clif_movepc(sd); // clif_movepc(sd);
if(sd->state.size==SZ_BIG) // tiny/big players [Valaris] 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) else if(sd->state.size==SZ_MEDIUM)
clif_specialeffect(&sd->bl,421,AREA); clif_specialeffect(&sd->bl,EF_BABYBODY2,AREA);
if (sd->status.robe) if (sd->status.robe)
clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA); 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); TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris] 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) else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA); clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
} }
break; break;
case BL_PET: case BL_PET:
@ -1762,7 +1762,7 @@ void clif_move(struct unit_data *ud)
if (!vd ) if (!vd )
return; return;
//This performance check is needed to keep GM-hidden objects from being notified to bots. //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 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)) { if(disguised(bl)) {
WBUFW(buf,0)=0x86; WBUFW(buf,0)=0x86;
@ -3492,7 +3492,7 @@ void clif_changelook(struct block_list *bl, int type, int val) {
if (!sd) if (!sd)
break; break;
if ( val == INVISIBLE_CLASS ) if ( val == JT_INVISIBLE )
return; return;
if (sd->sc.option&OPTION_COSTUME) 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; int len;
vd = status_get_viewdata(bl); vd = status_get_viewdata(bl);
if (!vd || vd->class_ == INVISIBLE_CLASS) if (!vd || vd->class_ == JT_INVISIBLE)
return; return;
/** /**
@ -4638,9 +4638,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
clif_getareachar_pc(sd, tsd); clif_getareachar_pc(sd, tsd);
if(tsd->state.size==SZ_BIG) // tiny/big players [Valaris] 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) 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 ) if( tsd->bg_id && map[tsd->bl.m].flag.battleground )
clif_sendbgemblem_single(sd->fd,tsd); clif_sendbgemblem_single(sd->fd,tsd);
if ( tsd->status.robe ) 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 ) if( nd->chat_id )
clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd); clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd);
if( nd->size == SZ_BIG ) 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 ) 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_efst_status_change_sub(&sd->bl, bl, SELF);
clif_progressbar_npc(nd, sd); 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; TBL_MOB* md = (TBL_MOB*)bl;
if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris] 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) 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 PACKETVER >= 20120404
if (battle_config.monster_hp_bars_info && !map[bl->m].flag.hidemobhpbar) { if (battle_config.monster_hp_bars_info && !map[bl->m].flag.hidemobhpbar) {
int i; int i;
@ -5152,7 +5152,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
nullpo_ret(bl); nullpo_ret(bl);
switch(bl->type){ switch(bl->type){
case BL_PC: case BL_PC:
if(sd->vd.class_ != INVISIBLE_CLASS) if(sd->vd.class_ != JT_INVISIBLE)
clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd); clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
if(sd->chatID){ if(sd->chatID){
struct chat_data *cd; 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); clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
break; break;
default: 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); clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
break; break;
} }
@ -5185,7 +5185,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
nullpo_ret(tbl); nullpo_ret(tbl);
if(tbl->type == BL_SKILL) //Trap knocked out of sight if(tbl->type == BL_SKILL) //Trap knocked out of sight
clif_clearchar_skillunit((struct skill_unit *)tbl,sd->fd); 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))) !(tbl->type == BL_NPC && (((TBL_NPC*)tbl)->sc.option&OPTION_INVISIBLE)))
clif_clearunit_single(tbl->id,CLR_OUTSIGHT,sd->fd); 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_spawn(&hd->bl);
clif_emotion(&sd->bl, E_NO1); 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 //status_Calc flag&1 will make current HP/SP be reloaded from hom structure
hom->hp = hd->battle_status.hp; 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_spawn(&hd->bl);
clif_emotion(&sd->bl, E_NO1); 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 //status_Calc flag&1 will make current HP/SP be reloaded from hom structure
hom = &hd->homunculus; hom = &hd->homunculus;
@ -705,7 +705,7 @@ void hom_gainexp(struct homun_data *hd,int exp)
if( hd->exp_next == 0 ) if( hd->exp_next == 0 )
hd->homunculus.exp = 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_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100); status_percent_heal(&hd->bl, 100, 100);
} }
@ -1335,7 +1335,7 @@ int hom_shuffle(struct homun_data *hd)
clif_homskillinfoblock(sd); clif_homskillinfoblock(sd);
status_calc_homunculus(hd, SCO_NONE); status_calc_homunculus(hd, SCO_NONE);
status_percent_heal(&hd->bl, 100, 100); status_percent_heal(&hd->bl, 100, 100);
clif_specialeffect(&hd->bl,568,AREA); clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
return 1; return 1;
} }

View File

@ -111,9 +111,9 @@ static struct script_event_s
struct view_data* npc_get_viewdata(int class_) struct view_data* npc_get_viewdata(int class_)
{ //Returns the viewdata for normal npc classes. { //Returns the viewdata for normal npc classes.
if( class_ == INVISIBLE_CLASS ) if( class_ == JT_INVISIBLE )
return &npc_viewdb[0]; return &npc_viewdb[0];
if (npcdb_checkid(class_) || class_ == WARP_CLASS){ if (npcdb_checkid(class_)){
if( class_ > MAX_NPC_CLASS2_START ){ if( class_ > MAX_NPC_CLASS2_START ){
return &npc_viewdb2[class_-MAX_NPC_CLASS2_START]; return &npc_viewdb2[class_-MAX_NPC_CLASS2_START];
}else{ }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] 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] { //Client won't display option changes for these classes [Toms]
if (nd->sc.option&(OPTION_HIDE|OPTION_INVISIBLE)) if (nd->sc.option&(OPTION_HIDE|OPTION_INVISIBLE))
clif_clearunit_area(&nd->bl, CLR_OUTSIGHT); 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. * 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 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. char viewid[1024]; // Max size of name from const.txt, see read_constdb.
// Extract view ID / constant // 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)) { if(!npc_viewisid(viewid)) {
// Check if constant exists and get its value. // Check if constant exists and get its value.
if(!script_get_constant(viewid, &val)) { 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)); ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE. \n", viewid, filepath, strline(buffer,start-buffer));
val = INVISIBLE_CLASS; val = JT_INVISIBLE;
} }
} else { } else {
// NPC has an ID specified for view id. // 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) bool npc_viewisid(const char * viewid)
{ {
if(atoi(viewid) != -1) { if(atoi(viewid) != JT_FAKENPC) {
// Loop through view, looking for non-numeric character. // Loop through view, looking for non-numeric character.
while (*viewid) { while (*viewid) {
if (ISDIGIT(*viewid++) == 0) return false; 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)); safestrncpy(nd->name, nd->exname, ARRAYLENGTH(nd->name));
if( battle_config.warp_point_debug ) if( battle_config.warp_point_debug )
nd->class_ = WARP_DEBUG_CLASS; nd->class_ = JT_GUILD_FLAG;
else else
nd->class_ = WARP_CLASS; nd->class_ = JT_WARPNPC;
nd->speed = 200; nd->speed = 200;
nd->u.warp.mapindex = to_mapindex; 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); npc_parsename(nd, w3, start, buffer, filepath);
if (!battle_config.warp_point_debug) if (!battle_config.warp_point_debug)
nd->class_ = WARP_CLASS; nd->class_ = JT_WARPNPC;
else else
nd->class_ = WARP_DEBUG_CLASS; nd->class_ = JT_GUILD_FLAG;
nd->speed = 200; nd->speed = 200;
nd->u.warp.mapindex = i; 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); 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->speed = 200;
++npc_shop; ++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); 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->speed = 200;
nd->u.scr.script = script; nd->u.scr.script = script;
nd->u.scr.label_list = label_list; 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); nd = npc_create_npc(m, x, y);
npc_parsename(nd, w3, start, buffer, filepath); 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->speed = 200;
nd->src_id = src_id; nd->src_id = src_id;
nd->bl.type = BL_NPC; 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: case NPCTYPE_WARP:
++npc_warp; ++npc_warp;
if( !battle_config.warp_point_debug ) if( !battle_config.warp_point_debug )
nd->class_ = WARP_CLASS; nd->class_ = JT_WARPNPC;
else else
nd->class_ = WARP_DEBUG_CLASS; nd->class_ = JT_GUILD_FLAG;
nd->u.warp.xs = xs; nd->u.warp.xs = xs;
nd->u.warp.ys = ys; nd->u.warp.ys = ys;
nd->u.warp.mapindex = dnd->u.warp.mapindex; 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); map_addnpc(m, wnd);
safestrncpy(wnd->name, "", ARRAYLENGTH(wnd->name)); safestrncpy(wnd->name, "", ARRAYLENGTH(wnd->name));
safestrncpy(wnd->exname, newname, ARRAYLENGTH(wnd->exname)); safestrncpy(wnd->exname, newname, ARRAYLENGTH(wnd->exname));
wnd->class_ = WARP_CLASS; wnd->class_ = JT_WARPNPC;
wnd->speed = 200; wnd->speed = 200;
wnd->u.warp.mapindex = map_id2index(imap); wnd->u.warp.mapindex = map_id2index(imap);
wnd->u.warp.x = snd->u.warp.x; wnd->u.warp.x = snd->u.warp.x;
@ -4756,7 +4756,7 @@ void do_init_npc(void){
//Stock view data for normal npcs. //Stock view data for normal npcs.
memset(&npc_viewdb, 0, sizeof(npc_viewdb)); 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++ ) for( i = 1; i < MAX_NPC_CLASS; i++ )
npc_viewdb[i].class_ = i; npc_viewdb[i].class_ = i;
for( i = MAX_NPC_CLASS2_START; i < MAX_NPC_CLASS2_END; 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 = (struct npc_data *)aCalloc(1,sizeof(struct npc_data));
fake_nd->bl.m = -1; fake_nd->bl.m = -1;
fake_nd->bl.id = npc_get_new_npc_id(); fake_nd->bl.id = npc_get_new_npc_id();
fake_nd->class_ = -1; fake_nd->class_ = JT_FAKENPC;
fake_nd->speed = 200; fake_nd->speed = 200;
strcpy(fake_nd->name,"FAKE_NPC"); strcpy(fake_nd->name,"FAKE_NPC");
memcpy(fake_nd->exname, fake_nd->name, 9); 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 #define START_NPC_NUM 110000000
enum actor_classes enum e_job_types
{ {
WARP_CLASS = 45, NPC_RANGE1_START = 44,
HIDDEN_WARP_CLASS = 139, JT_WARPNPC,
WARP_DEBUG_CLASS = 722, JT_1_ETC_01,
FLAG_CLASS = 722, JT_1_M_01,
INVISIBLE_CLASS = 32767, 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 // Old NPC range
#define MAX_NPC_CLASS 1000 #define MAX_NPC_CLASS NPC_RANGE2_END
// New NPC range // New NPC range
#define MAX_NPC_CLASS2_START 10000 #define MAX_NPC_CLASS2_START NPC_RANGE3_START
#define MAX_NPC_CLASS2_END 10281 #define MAX_NPC_CLASS2_END NPC_RANGE3_END
//Checks if a given id is a valid npc id. [Skotlex] //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) //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 #ifdef PCRE_SUPPORT
void npc_chat_finalize(struct npc_data* nd); 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) ) { if( pc_isinvisible(sd) ) {
sd->vd.class_ = INVISIBLE_CLASS; sd->vd.class_ = JT_INVISIBLE;
clif_displaymessage( sd->fd, msg_txt( sd, 11 ) ); // Invisible: On clif_displaymessage( sd->fd, msg_txt( sd, 11 ) ); // Invisible: On
// decrement the number of pvp players on the map // decrement the number of pvp players on the map
map[sd->bl.m].users_pvp--; map[sd->bl.m].users_pvp--;

View File

@ -14006,6 +14006,13 @@ BUILDIN_FUNC(misceffect)
int type; int type;
type=script_getnum(st,2); 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) { if(st->oid && st->oid != fake_nd->bl.id) {
struct block_list *bl = map_id2bl(st->oid); struct block_list *bl = map_id2bl(st->oid);
if (bl) if (bl)
@ -14369,6 +14376,11 @@ BUILDIN_FUNC(specialeffect)
if(bl==NULL) if(bl==NULL)
return SCRIPT_CMD_SUCCESS; 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) ) if( script_hasdata(st,4) )
{ {
TBL_NPC *nd = npc_name2id(script_getstr(st,4)); TBL_NPC *nd = npc_name2id(script_getstr(st,4));
@ -14396,6 +14408,11 @@ BUILDIN_FUNC(specialeffect2)
int type = script_getnum(st,2); int type = script_getnum(st,2);
enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA; 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); clif_specialeffect(&sd->bl, type, target);
} }
return SCRIPT_CMD_SUCCESS; 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)) { if(revive&(1|4) && pc_isdead(sd)) {
status_revive(&sd->bl, 100, 100); status_revive(&sd->bl, 100, 100);
clif_displaymessage(sd->fd,msg_txt(sd,16)); // You've been revived! 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)) { } else if(revive&(1|2) && !pc_isdead(sd)) {
status_percent_heal(&sd->bl, 100, 100); status_percent_heal(&sd->bl, 100, 100);
clif_displaymessage(sd->fd,msg_txt(sd,680)); // You have been recovered! 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); delete_timer(md->deletetimer, mob_timer_delete);
md->deletetimer = add_timer(tick+(timeout>0?timeout:60000),mob_timer_delete,md->bl.id,0); 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. 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); sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
} }
script_pushint(st, md->bl.id); script_pushint(st, md->bl.id);
@ -16410,7 +16427,7 @@ BUILDIN_FUNC(setnpcdisplay)
{ {
const char* name; const char* name;
const char* newname = NULL; const char* newname = NULL;
int class_ = -1, size = -1; int class_ = JT_FAKENPC, size = -1;
struct script_data* data; struct script_data* data;
struct npc_data* nd; struct npc_data* nd;
@ -16450,7 +16467,7 @@ BUILDIN_FUNC(setnpcdisplay)
else else
size = -1; size = -1;
if( class_ != -1 && nd->class_ != class_ ) if( class_ != JT_FAKENPC && nd->class_ != class_ )
npc_setclass(nd, class_); npc_setclass(nd, class_);
else if( size != -1 ) else if( size != -1 )
{ // Required to update the visual size { // Required to update the visual size
@ -22571,6 +22588,11 @@ BUILDIN_FUNC(hateffect){
effectID = script_getnum(st,2); effectID = script_getnum(st,2);
enable = script_getnum(st,3) ? true : false; 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 ); ARR_FIND( 0, sd->hatEffectCount, i, sd->hatEffectIDs[i] == effectID );
if( enable ){ 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. // 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. // 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 ) if( --sc->data[SC_KAITE]->val2 <= 0 )
status_change_end(bl, SC_KAITE, INVALID_TIMER); status_change_end(bl, SC_KAITE, INVALID_TIMER);
return 2; 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] 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 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); clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
} }
break; 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 { //Erase death count 1% of the casts
dstsd->die_counter = 0; dstsd->die_counter = 0;
pc_setglobalreg(dstsd, add_str("PC_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. //SC_SPIRIT invokes status_calc_pc for us.
} }
clif_skill_nodamage(src,bl,skill_id,skill_lv, 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; break;
default: //Those that don't require a skill? default: //Those that don't require a skill?
if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20) { //Cooking items. 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) if (sd->cook_mastery < 1999)
pc_setglobalreg(sd, add_str("COOK_MASTERY"), sd->cook_mastery + ( 1 << ( (skill_produce_db[idx].itemlv - 11) / 2 ) ) * 5); 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; break;
default: default:
if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 ) { //Cooking items. 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) 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 )); 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); nullpo_retv(bl);
if (mobdb_checkid(class_) || mob_is_clone(class_)) if (mobdb_checkid(class_) || mob_is_clone(class_))
vd = mob_get_viewdata(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_); vd = npc_get_viewdata(class_);
else if (homdb_checkid(class_)) else if (homdb_checkid(class_))
vd = hom_get_viewdata(class_); vd = hom_get_viewdata(class_);

View File

@ -2759,31 +2759,6 @@ int unit_counttargeted(struct block_list* bl)
return 0; 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' * Makes 'bl' that attacking 'src' switch to attack 'target'
* @param bl * @param bl