Jump to content

Erebos

Members
  • Posts

    65
  • Joined

  • Last visited

Posts posted by Erebos

  1. 1 hour ago, AnnieRuru said:
    
    guild_vs2,50,50,5	script	#asdf	HIDDEN_WARP_NPC,3,3,{
    	end;
    OnTouch:
    	getmapxy .@map$, .@x, .@y, UNITTYPE_PC;
    	dispbottom .@x +" "+ .@y;
    	if ( .@x == 47 )
    		pushpc DIR_WEST, 1;
    	else if ( .@x == 53 )
    		pushpc DIR_EAST, 1;
    	else if ( .@y == 47 )
    		pushpc DIR_SOUTH, 1;
    	else if ( .@y == 53 )
    		pushpc DIR_NORTH, 1;
    	end;
    }

    hercules code, you know how to convert

    So clean! with some modifications i made it work at any coordinates, thanks!

  2. I'm trying to do a npc that pushes away the player, whatever the direction the player comes from. I know it can work if i put the specific coordinates but i want to replicate it so i need something that will work in any map. I tried this for start.
     

    prontera,50,50,0	script	push	99,3,3,{
    OnTouch:
    getmapxy(@mapname$, @mapx, @mapy, BL_PC);
    getmapxy(@mapnamee$, @x, @y, BL_NPC);
    
    if (@mapx = @x - 3 & @mapy = @y | @mapy = @y + 1 | @mapy = @y +2 | @mapy = @y - 1 | @mapy = @y -2 ) { pushpc DIR_WEST, 2; end; }
    if (@mapx = @x - 2 & @mapy = @y - 3 | @mapx = @x - 1 & @mapy = @y - 3 | @mapx = @x & @mapy = @y - 3 | @mapx = @x + 1 & @mapy = @y - 3 | @mapx = @x + 2 & @mapy = @y - 3) { pushpc DIR_SOUTH, 2; end; }
    
    }

    This is supposed to push west if the player approach the npc from the left and push south if the player approach from below.
    But only the West push works and the South push is pushing West.

    Please correct me what im doing wrong, thanks.

  3. As we all know, a player needs high Attack Speed to spam a skill with no After-Cast Delay. For example; a Creator with Poem of Bragi can't spam Acid demonstration effectively without high ASPD. This is called animation delay or amotion delay (as far as i know).

    I'm having a bug that ignores this ASPD requirement and i can spam very very fast even with less than 100 ASPD. Even when the skills does have After-Cast Delay or Cool Down, i can spam 2 or 3 skills before the delay or CD begins! With an Auto Hotkey i can spam more than 20 skills per sec.

    I have tried adding Animation delay on "CastEnd" in skill.conf but it doesnt fix the problem itself, i still can cast more than 1 skill before the After-skill delay or cooldown begins.

    I hope anyone can help me. Thanks in advance.

  4. 1 hour ago, AnnieRuru said:

    I already lost count how many times I have been using getinventorylist this month ...

    
    function	script	F_MesItemInfo	{
    	.@item = getarg(0);
    	.@itemname$ = getitemname(.@item);
    	if (.@itemname$ == "null")
    		.@itemname$ = "Unknown Item";
    	if (PACKETVER >= 20150729)
    		return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item);
    	else if (PACKETVER >= 20130130)
    		return sprintf("<ITEMLINK>%s<INFO>%d</INFO></ITEMLINK>", .@itemname$, .@item);
    	else
    		return .@itemname$;
    }
    
    prontera,155,185,5	script	jdshfjsdfh	1_F_MARIA,{
    	getinventorylist;
    	for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) {
    		if ( inarray(.itemlist, @inventorylist_id[.@i] ) >= 0 ) {
    			.@itemid[.@c++] = @inventorylist_id[.@i];
    			.@menu$ += getitemname( @inventorylist_id[.@i] ) +":";
    		}
    	}
    	if ( !.@c ) {
    		mes "You don't have any ticket on you";
    		close;
    	}
    	.@s = select( .@menu$ ) -1;
    	mes "You have selected "+ F_MesItemInfo(.@itemid[.@s]);
    	close;
    OnInit:
    	setarray .itemlist, 909,910,911,912,
    		34993,34994,34995,34996;
    	end;
    }

     

    Thanks for this magic, but how to have differents effect depending on the selected item? if i simply add countitem if they have 2 items the condition will pass.

  5. 6 hours ago, pajodex said:
    
    switch(select( (countitem(34996) >= 1)? "wow you have item 34996":"some text")) { }

    Thanks! it worked but the arguments replace each other generating a 1 option menu, what i want is if the players have 4 items, they get a 4 option menu, if they have 2 items, they get 2 options, corresponding to the item they have.
    Tried this, but i get errors:
     

    switch(select((countitem(34996) >= 1)?"Insertar Ticket Clase C" , (countitem(34995) >= 1)?"Insertar Ticket Clase B" , (countitem(34994) >= 1)?"Insertar Ticket Clase A" , (countitem(34993) >= 1)?"Insertar Ticket Clase S" , "Cancelar")) {
    
    	case 1:
    	mes "ticket 1";
    	close;
    	end;
    	case 2:
    	mes "ticket 2";
    	close;
    	end;
    	case 3:
    	mes "ticket 3";
    	close;
    	end;
    	case 4:
    	mes "ticket 4";
    	close;
    	end;
    	case 5:
    	close;
    	end;
    
    }

     

  6. Two questions about conditions:


    Conditions for labels: Its possible to add a condition to pass to a Label? like, a condition of groupid 1 for OnPCDieEvent to trigger in the player. (I know i can do it inside the label, but i cant make it work otherwise).


    Condition inside a menu: IDK how o do it, tried this(i apologize if its stupid xD, i am very new in scripting) :

    switch(select("+((countitem(34996) >= 1)"wow you have item 34996")+":"some text")) { }

    its supposed to print case 1 only if the player has the item, otherwise it should only print case 2.

  7. Guys how can i change the range required to use Counter Slash? 
    So, when Weapon Blocking is triggered the attacker needs to be on the next cell(not even counting diagonal cells, the area is a cross) to allow the GX cast Counter Slash. This makes the skill useless against almost every job, (almost every mele skill, even the basic attacks, have at least 2 cells of range). So i want to make it have at least 2 cells of range to cast Counter Slash when Weapon Blocking is triggered.

    Adding Range or Effect Area in skill_db.txt doesn't work.

    Thanks in advance.

  8. 12 minutes ago, utofaery said:

    Word of advice:

    Read git changes before you update your server files! 

    then update your script file accordingly to prevent this kind of stuff from happening in future.

    Yes i'm doing some research about that xD, some other instances script are crashing the server too.

  9. In this Temple of Demon God script when i'm going to start the instance it crashes the map-server, no information in the console, just a "Server received crash signal! attempting to save all online characters".

     

    //===== Alayne Scripts =======================================
    //= Temple of Demon God Instance
    //===== By: ================================================== 
    //= Alayne
    //===== Current Version: ===================================== 
    //= 1.0
    //===== Compatible With: ===================================== 
    //= rAthena SVN
    //= hercules SVN
    //===== Description: ========================================= 
    //= The official instance Temple of Demon God transcription
    //===== Todo Remaining: ======================================
    //
    //===== Additional Comments: =================================
    //
    //
    //============================================================
    
    moro_vol,108,88,5	script	Commander Hiva Agip::alatdgcha	4_M_REDSWORD,{
    	set .@npcname$, "[Commander Hiva Agip]";
    	cutin "ep13_captin_edq", 2;
    	mes .@npcname$;
    	if(checkquest(.questId) == -1)
    	{
    		mes "Hey! You! Come here.";
    		mes "I need you help.";
    		mes "Morocc is regaining his power! We absolutely need to defy him, and defeat him before he raised again.";
    		mes "But I'm affraid we're not strong enough to fight him...";
    		mes "Can you help us?";
    		if(select("Yes","No") == 1)
    		{
    			next;
    			mes .@npcname$;
    			mes "Good! I'm couting on you!";
    			mes "I'll pray for your victory!";
    			setquest .questId;
    		}
    	}
    	else if(checkquest(.questId, HUNTING) < 2)
    	{
    		//uncomplete quest
    		mes "You didn't fullfill the quest yet, do you?";
    	}
    	else if(checkquest(.questId, HUNTING) == 2)
    	{
    		//complete quest
    		mes "*Whistle* Good work!";
    		mes "How's the Temple of Demon God? Still the same?";
    		getitem 22537,1;
    		//getitem reward
    		completequest .questId;
    		erasequest .questId;
    	}
    	else
    	{
    		mes "Now that we've taken care of the main body, we can take things slow.";
    		mes "Why don't you go rest for now? Leave the rest to us.";
    	}
    	cutin "", 255;
    	close;
    	
    OnInit:
    	set .questId, 7593;
    	end;
    }	
    
    
    moro_vol,110,90,3	script	Abidal::alatdga	4_M_KNIGHT_GOLD,{
    	set .@npcname$, "[Abidal]";
    	mes .@npcname$;
    	if(checkquest(.questId) == -1)
    	{
    		mes "Hey! I've heard the Commander gave you a quest.";
    		mes "I have also something to ask you.";
    		mes "Two monsters protect Morocc. Brinaranea and Muspelskoll.";
    		mes "If you defeat them, it'll weakened this Demon...";
    		mes "Can you handle that?";
    		if(select("Yes","No") == 1)
    		{
    			next;
    			mes .@npcname$;
    			mes "Good! I'm couting on you!";
    			mes "I'll pray for your victory!";
    			setquest .questId;
    		}
    	}
    	else if(checkquest(.questId, HUNTING) < 2)
    	{
    		//uncomplete quest
    		mes "You didn't fullfill the quest yet, do you?";
    	}
    	else if(checkquest(.questId, HUNTING) == 2)
    	{
    		//complete quest"
    		mes "You did it! I knew you would!";
    		mes "Congratulations!";
    		mes "But I'm affraid this is not over yet.";
    		mes "I have this nagging sense of misgiving.";
    		mes "I'm sorry. Maybe I'm thinking irrationally.";
    		next;
    		mes .@npcname$;
    		mes "Take this as a reward, and a thanks from me.";
    		//getitem 
    		completequest .questId;
    		erasequest .questId;
    	}
    	else
    	{
    		mes "Take some rest now.";
    	}
    	close;
    	
    OnInit:
    	set .questId, 7594;
    	end;
    }	
    
    moro_cav,43,73,3	script	Yggdrasil Lookalike::alatdgyl	HIDDEN_NPC,{
    OnStart:
    	set .@party_id, getcharid(1);
    	set .@tdg_leader, ( getcharid(0) == getpartyleader(.@party_id,2) );
    
    	set .@has_instance, TDG_INSTANCE_ID > 0;
    	
    	set .@instance_delay, ( instance_delay_templedg - gettimetick(2) );
    
    	set .@npcname$, "[Yggdrasil Lookalike]";
    	mes .@npcname$;
    	mes "You touched the tree and felt a strange flow of mana.";
    	mes "Perhaps the flow of mana will guide to the depth of the temple.";
    	if( ep14_3_morse == 0 )
    		next;
    	if( .@instance_delay > 0 )
    	{
    		mes "You have to wait : ^FF0000"+.@instance_delay+" Seconds.^000000";
    		close;
    	}
    	
    	switch( select( 
    		(( .@party_id && .@tdg_leader && !.@has_instance )?"Create " + .instance_name$:""),
    		(( .@party_id && .@has_instance )?"Enter " + .instance_name$:""),
    		(( .@party_id && .@tdg_leader && .@has_instance )?"Destroy " + .instance_name$:""),
    	"Nevermind."
    		)){
    	case 1:
    		getpartymember .@party_id,2;
    		if( .min_party_member >= 1 ){
    			set .@origin, getcharid(3);
    			set .@gettimetick, gettimetick(2);
    			for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    				if( attachrid( $@partymemberaid[.@i] ) ){
    					set .@member_count, .@member_count + 1;
    					if( BaseLevel < .base_level[0] || BaseLevel > .base_level[1] ) set .@fail, .@fail|1;
    					if( Zeny < .instance_zeny ) set .@fail, .@fail|2;
    					if( instance_delay_templedg > .@gettimetick ) set .@fail, .@fail|4;
    					if( .@fail ){
    						set .@name$, strcharinfo(0);
    						break;
    					}
    				}
    			attachrid( .@origin );
    		}
    		
    		//clean any previously remaining instance
    		if(TDG_INSTANCE_ID > 0)
    		{			
    			getpartymember getcharid(1),2;
    			for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    				if( attachrid( $@partymemberaid[.@i] ) && TDG_INSTANCE_ID > 0){
    					set TDG_INSTANCE_ID, -1;
    				}
    			instance_destroy instance_id();
    		}
    		
    		if( .@name$ != "" && .@fail ){
    			mes "^FF0000[ Failed ]^000000";
    			mes "^0055FF"+.@name$+"^000000, You cannot join right now.";
    			mes " ";
    			mes "^FF0000[ Reason: ]^000000";
    			if( .@fail & 1 ) mes "^777777You must be Level: "+.base_level[0]+" - "+.base_level[1]+"^000000";
    			if( .@fail & 2 ) mes "^777777You need "+ .instance_zeny +" Zeny^000000";
    			if( .@fail & 4 ) mes "^777777You still have cooldown.^000000";
    			break;
    		}
    		
    		getpartymember getcharid(1),0;
    		if (instance_check_party(.@party_id, .min_party_member, .base_level[0], .base_level[1]) == 0) {
    			mes "^0055FF[ "+.instance_name$+" ]^000000";
    			mes "Make or join a party with at least "+.min_party_member+" member and try again, with level between " +.base_level[0] + " and " + .base_level[1] + ".";
    		}
    		else{
    			set .@instance, instance_create( .instance_name$ );
    			if( .@instance < 0 ) {
    				npctalk .instance_name$ + " reservation failed.";
    				mes "^0000FF"+ .instance_name$ +" ^000000 - Reservation Failed!";
    				close;
    			}
    			mes "^0055FF[ "+.instance_name$+" ]^000000";
    			mes "^0000FF"+.instance_name$+" ^000000 - Reserved";
    			set .@gettimetick, gettimetick(2);
    			getpartymember .@party_id,2;
    			for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    				if( attachrid( $@partymemberaid[.@i] ) )
    					set TDG_INSTANCE_ID, .@instance;
    			attachrid( .@origin );
    			npctalk .instance_name$ + " has been generated for Party - " + getpartyname( .@party_id );
    			
    			//disable unused npcs for now
    			disablenpc instance_npcname( "tdgWarp#1", instance_id() );
    			disablenpc instance_npcname( "tdgWarp#2", instance_id() );
    			disablenpc instance_npcname( "tdgWarp#3", instance_id() );
    			disablenpc instance_npcname( "tdgWarp#4", instance_id() );
    			disablenpc instance_npcname( "tdgWarp#5", instance_id() );
     		}
    	case 2:
    		if( TDG_INSTANCE_ID <= 0 ){
    			mes .instance_name$ + " doesn't exist for Party - "+getpartyname( .@party_id );
    		}
    		else{
    			getmapxy(.@map$, .@x, .@y, UNITTYPE_PC);
    			//save .@map$, .@x, .@y;
    			set instance_delay_templedg, ( .@gettimetick + ( .instance_delay ));
    			switch(instance_enter(.instance_name$)) {
    				default:
    					mes "An unknown error has occurred.";
    					close;
    				case 2:
    					mes "The memorial dungeon " + .instance_name$ + " does not exist.";
    					mes "The party leader did not generate the dungeon yet.";
    					close;
    				case 1:
    					mes "You can enter the dungeon after making the party.";
    					close;
    				case 0:
    					mapannounce .@map$, strcharinfo(0)+" from party, " +getpartyname( .@party_id )+", tdg entering the dungeon, "+.instance_name$+".",bc_map,"0x00ff99",FW_NORMAL,12;
    					close;
    			}
    		}
    		break;
    	case 3:
    		mes .instance_name$ + " Destroyed.";
    		getpartymember getcharid(1),2;
    		for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    			if( attachrid( $@partymemberaid[.@i] ) && TDG_INSTANCE_ID > 0){
    				set TDG_INSTANCE_ID, -1;
    			}
    		instance_destroy instance_id();
    		break;
    	default: 
    		break;
    }
    close;
    
    OnPCLoginEvent:
    OnPCLogoutEvent:
    	set TDG_INSTANCE_ID, -1;
    	end;
    
    OnInit:
    	setarray .base_level[0],145, 175;
    	setarray .map$[0],"1@eom";
    	set .map_size, getarraysize( .map$ );
    	set .min_party_member, 1;
    	set .instance_delay, 7200;
    	set $tdg_timer_delay, 3600; //1 hour to clean the instance
    	set .instance_name$, "Temple of Demon God";
    	end;
    }
    
    
    1@eom,101,107,4	script	temple_demon_god	HIDDEN_WARP_NPC,2,2,{
    function summon_normal;
    function summon_guardian;
    end;
    
    OnInstanceInit:
    	set .@map$, strnpcinfo(4);
    	
    	set 'instance_tdg_level, 0;
    	set .max_tdg_level, 6;
    	
    	set .moroccId, -1;
    	
    	instance_announce instance_id(), "[Temple of Demon God] Eliminate the Demon God's Apostles, Ahat and Shnaim.",bc_map,0x00ff99;
    	sleep 1500;
    	instance_announce instance_id(), "[Temple of Demon God] Then collect their Souls. Those are the key to open the Temple.",bc_map,0x00ff99;
    
    	set 'ahatSoul, 6713;
    	set 'shnaimSoul, 6714;
    	set 'tdgMercenaryOn, 0;
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	summon_normal( .@map$,.@npc_name$, 1 );
    	
    	set .timerCount, 0;
    	initnpctimer;
    	end;
    
    function	summon_normal	{
    	set .@map$, getarg(0);
    	set .@npcname$, getarg(1);
    	set .@increaseFloor, getarg(2);
    	
    	if(.@increaseFloor == 1)
    	{
    		'instance_tdg_level++;
    	}
    	
    	switch( 'instance_tdg_level ){
    		case 1:
    			//ahat and shnaim
    			setarray .@monster,3041,3039,3040;
    			setarray .@amount,1,1,1;
    			setarray .@coordinate,89,13,111,49;
    			setarray .@label$, "OnAhatDied","OnShnaimDied",0;
    			break;
    		case 2:
    			//dolomedes
    			setarray .@monster,3088;
    			setarray .@amount,5;
    			setarray .@coordinate,54,97,33,138;
    			break;
    		case 3:
    			//kasa
    			setarray .@monster,3089;
    			setarray .@amount,5;
    			setarray .@coordinate,153,91,173,140;
    			break;
    		case 4:
    			//two satan morocc
    			setarray .@monster,3098,3099;
    			setarray .@amount,1,1;
    			setarray .@coordinate,90,208,116,176;
    			break;
    		case 6:
    			//random pop salamander or dolomedes
    			if(rand(0,1) == 1)
    			{
    				setarray .@monster,3088;
    			}
    			else
    			{
    				setarray .@monster,3090;
    			}
    			setarray .@amount,5;
    			setarray .@coordinate,90,208,116,176;
    			break;
    	}
    	set .@monster_size, getarraysize( .@monster );
    	for( set .@i, 0; .@i < .@monster_size; set .@i,.@i+1 ){
    		set .@target_amount, ( .@amount[.@i] );
    		set .@size, 0;
    		if(getarraysize(.@label$) == 0)
    		{
    			set .@clabel$, .@npcname$ + "::OnNormalDied";
    		}
    		else
    		{
    			set .@clabel$, .@npcname$ + "::" + .@label$[.@i];
    		}	
    		areamonster .@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@clabel$,.@size;
    	}
    	return;
    }
    
    function	summon_guardian	{
    	set .@map$, getarg(0);
    	set .@label$, getarg(1);
    			
    	switch( 'instance_tdg_level ){
    		case 2:
    			//brynarea
    			setarray .@monster,3091;
    			setarray .@coordinate,54,97,33,138;
    			break;
    		case 3:
    			//muspelskoll
    			setarray .@monster,3092;
    			setarray .@coordinate,153,91,173,140;
    			break;
    		case 4:
    			//morocc boy
    			setarray .@monster,3096;
    			setarray .@coordinate,90,208,116,176;
    			break;
    		case 5:
    			//morocc boy, 20% left
    			setarray .@monster,3096;
    			setarray .@coordinate,90,208,116,176;
    			break;
    		case 6:
    			//morocc adult
    			setarray .@monster,3097;
    			setarray .@coordinate,90,208,116,176;
    			break;
    		default: 
    			mapannounce .@map$,"[ Temple of Demon God ] : Cleared!! Congratulation!!",bc_map,0x00FF99;
    			return;
    	}
    	set .@monster_size, getarraysize( .@monster );
    	for( set .@i, 0; .@i < .@monster_size; set .@i,.@i+1 ){
    		set .@target_amount, 1;
    		set .@size, 0;
    		if('instance_tdg_level == 4)
    		{
    			//RATHENA
    			areamonster(.@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@label$,.@size);
    			set .moroccId, $@mobid[0];
    			//HERCULES
    			//set .moroccId, areamonster(.@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@label$,.@size);
    		}
    		else if('instance_tdg_level == 5)
    		{
    			//RATHENA
    			areamonster(.@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@label$,.@size);
    			set .moroccId, $@mobid[0];
    			getunitdata(.moroccId, .@moroccData);
    			setunitdata .moroccId, 2, .@moroccData[UMOB_MAXHP] * 20 / 100;
    			//HERCULES
    			//set .moroccId, areamonster(.@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@label$,.@size);
    			//set .@mhp, getunitdata($moroccId, UDT_MAXHP);
    			//setunitdata $moroccId, UDT_HP, .@mhp * 20 / 100;
    		}
    		else
    		{
    			areamonster(.@map$,.@coordinate[0],.@coordinate[1],.@coordinate[2],.@coordinate[3],"--ja--",.@monster[.@i],.@target_amount,.@label$,.@size);
    		}
    	}
    	return;
    }
    
    OnAhatDied:
    	//get item
    	getitem 'ahatSoul, 1;
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	set .@mob_dead_num, mobcount(.@map$,.@npc_name$+"::OnShnaimDied" );
    	if(.@mob_dead_num == 0)
    	{
    		instance_announce instance_id(), "[Temple of Demon God] Activate the Soul Globe to open the Temple.",bc_map,0x00ff99;
    		enablenpc instance_npcname( "alatdgor", instance_id() );
    	}
    	end;
    
    OnShnaimDied:
    	//get item
    	getitem 'shnaimSoul, 1;
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	set .@mob_dead_num, mobcount(.@map$,.@npc_name$+"::OnAhatDied" );
    	if(.@mob_dead_num == 0)
    	{
    		instance_announce instance_id(), "[Temple of Demon God] Activate the Soul Globe to open the Temple.",bc_map,0x00ff99;
    		enablenpc instance_npcname( "alatdgor", instance_id() );
    	}
    	end;
    
    OnNormalDied:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	set .@mob_dead_num, mobcount(.@map$,.@npc_name$+"::OnNormalDied" );
    	if( .@mob_dead_num == 0 && .@mob_dead_num2 == 0 ){
    		if('instance_tdg_level == 4)
    		{
    			'instance_tdg_level++;
    			//summon morocc boy again
    			summon_guardian( .@map$,.@npc_name$+"::OnGuardianDied" );
    		}	
    	}
    	end;
    	
    OnGuardianDied:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	set .@mob_dead_num, mobcount(.@map$,.@npc_name$+"::OnGuardianDied" );
    	set .@party_id, getcharid(1);
    	
    	if( !.@mob_dead_num ){
    	
    		if('instance_tdg_level == 2)
    		{
    			killmonster strnpcinfo(4), "All";
    			//nydhogg pop
    			enablenpc instance_npcname( "alatdgny2", instance_id() );
    			donpcevent instance_npcname( "alatdgny2", instance_id() ) + "::OnDialog2";
    		}
    		else if('instance_tdg_level == 3)
    		{
    			killmonster strnpcinfo(4), "All";
    			//nydhogg pop
    			enablenpc instance_npcname( "alatdgny3", instance_id() );	
    			donpcevent instance_npcname( "alatdgny3", instance_id() ) + "::OnDialog3";	
    		}
    		else if('instance_tdg_level == 5)
    		{
    			'instance_tdg_level++;
    			//morocc boy death
    			instance_announce instance_id(), "[Morocc] This is getting more interesting, humans!",bc_map,0xFF0000;
    			sleep 1500;
    			instance_announce instance_id(), "[Morocc] You don't think this is already over, do you?!",bc_map,0xFF0000;
    			sleep 1500;
    			set .randomPop, 1;
    			summon_guardian( .@map$, .@npc_name$ + "::OnGuardianDied" );
    		}
    		else if ('instance_tdg_level == .max_tdg_level)
    		{			
    			killmonster strnpcinfo(4), "All";
    			stopnpctimer;
    			instance_announce instance_id(), "Do...Don't think...It's over...You! You're allready...Dead!!",bc_map,0xFF0000;
    			sleep 1500;
    			
    			//enable portal
    			enablenpc instance_npcname( "alatdgny4", instance_id() );
    			
    			end;
    		}
    	}
    	end;
    	
    OnTimer10000:
    	//each 10s, increase timer
    	set .timerCount, .timerCount + 10;
    	if(.timerCount == $tdg_timer_delay)
    	{
    		instance_announce instance_id(), "[ Temple of Demon God ] The Dimension collapse! I have to get you out of there!", bc_map, 0xFF0000;
    		sleep 5000;
    		getpartymember getcharid(1),2;
    		for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    			if( attachrid( $@partymemberaid[.@i] ) && TDG_INSTANCE_ID > 0){
    				set TDG_INSTANCE_ID, -1;
    			}
    		instance_destroy instance_id();
    		stopnpctimer;
    	}
    	if(.randomPop == 1)
    	{
    		set .@map$, strnpcinfo(4);
    		set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    		set .@mob_dead_num, mobcount(.@map$,.@npc_name$+"::OnNormalDied" );
    		if(.@mob_dead_num == 0)
    		{
    			summon_normal( .@map$,.@npc_name$, 0 );
    		}
    	}
    	if(.checkHP == 1)
    	{
    		callsub OnCheckMoroccHP;
    	}
    	setnpctimer 0;
    	end;
    	
    OnCheckMoroccHP:	
    	//RATHENA
    	getunitdata(.moroccId, .@moroccData);
    	if(.@moroccData[UMOB_HP] <= .@moroccData[UMOB_MAXHP] / 2)
    	//HERCULES
    	//set .@hp, getunitdata($stefanId, UDT_HP);
    	//set .@mhp, getunitdata($stefanId, UDT_MAXHP);
    	//if(.@hp <= .@mhp / 2)
    	{
    		set .@map$, strnpcinfo(4);
    		set .@npc_name$, strnpcinfo(3);
    		killmonster strnpcinfo(4), "All";
    		set .checkHP, 0;
    		//stop, kill monster and pop 2 morocc
    		summon_normal( .@map$, strnpcinfo(3), 0 );
    	}	
    	return;
    	
    OnFirstFloorOn:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	//pop furious incarnation of morroc	
    	summon_normal( .@map$, .@npc_name$, 1 );
    	end;
    	
    OnSecondFloorOn:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	//pop dolomedes
    	summon_normal( .@map$, .@npc_name$, 1 );
    	//pop brynarea	
    	summon_guardian( .@map$, .@npc_name$ + "::OnGuardianDied" );
    	enablenpc instance_npcname( "tdgWarp#1", instance_id() );
    	end;
    	
    OnThirdFloorOn:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	//pop kasa
    	summon_normal( .@map$, .@npc_name$, 1 );
    	//pop muspelskoll	
    	summon_guardian( .@map$, .@npc_name$ + "::OnGuardianDied" );
    	enablenpc instance_npcname( "tdgWarp#3", instance_id() );
    	end;
    	
    OnFourthFloorOn:
    	set .@map$, strnpcinfo(4);
    	set .@npc_name$, instance_npcname( strnpcinfo(0), instance_id() );
    	'instance_tdg_level++;
    	//pop morocc boy	
    	summon_guardian( .@map$, .@npc_name$ + "::OnGuardianDied");
    	enablenpc instance_npcname( "tdgWarp#5", instance_id() );
    	set .checkHP, 1;
    	end;
    }
    
    1@eom,101,62,3	script	Temple Entrance::alatdgwe	HIDDEN_WARP_NPC,2,2,{
    	end;
    	
    OnTouch:
    	warp strnpcinfo(4), 98, 115;
    	end;
    	
    OnInit:
    OnInstanceInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,98,56,3	script	Soul Globe::alatdgor	HIDDEN_WARP_NPC,2,2,{
    	set .@npcname$, "[Soul Globe]";
    	mes .@npcname$;
    	mes "Do you wish to insert the Souls?";
    	if(select("Yes","No") == 1)
    	{
    		if(countitem('ahatSoul) > 0)
    		{
    			delitem 'ahatSoul, 1;
    			set .ahat, 1;
    		}
    		if(countitem('shnaimSoul) > 0)
    		{
    			delitem 'shnaimSoul, 1;
    			set .shnaim, 1;
    		}
    		if(.ahat == 1 && .shnaim == 1)
    		{
    			set .warpingOn, 1;
    			npctalk "[Soul Globe] The Door is open.";
    			instance_announce instance_id(), "[Soul Globe] The Door is open.", bc_map, 0x00FF99;
    			//enable warp
    			enablenpc instance_npcname( "alatdgwe", instance_id() );
    			enablenpc instance_npcname( "alatdge", instance_id() );
    			enablenpc instance_npcname( "alatdgmo", instance_id() );
    			enablenpc instance_npcname( "alatdglo", instance_id() );
    			enablenpc instance_npcname( "alatdgny", instance_id() );
    		}
    		else
    		{
    			next;
    			mes "[Soul Globe]";
    			mes "Insert the Ahat and Shnaim Souls to open the Door.";
    		}
    	}
    	close;
    	
    OnInstanceInit:
    OnInit:
    	enablenpc strnpcinfo(3);
    	set .ahat, 0;
    	set .shnaim, 0;
    	end;
    }
    
    1@eom,98,115,3	script	entrance::alatdge	HIDDEN_WARP_NPC,2,2,{
    	end;
    	
    OnTouch:
    	if('instance_tdg_level == 1)
    	{
    		sleep 5000;
    		donpcevent instance_npcname( "alatdgmo", instance_id() ) + "::OnDialog1_1";
    	}
    	end;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,102,124,3	script	Morocc::alatdgmo	4_F_MOCBOY,2,2,{
    	end;
    	
    OnDialog1_1:
    	if(.moTalking == 0)
    	{
    		set .moTalking, 1;
    		npctalk "I'll create a new world and become its creator.";
    		instance_announce instance_id(), "[Morocc] I'll create a new world and become its creator.",  bc_map, 0xFF0000;
    		sleep 1500;
    		npctalk "Let me ask you, the first creatures that have stepped in my newborn land.";
    		instance_announce instance_id(), "[Morocc] Let me ask you, the first creatures that have stepped in my newborn land.", bc_map, 0xFF0000;
    		sleep 1500;
    		npctalk "How'd you like to follow me and watch the birth of a new world?";
    		instance_announce instance_id(), "[Morocc] How'd you like to follow me and watch the birth of a new world?", bc_map, 0xFF0000;
    		sleep 1500;
    		donpcevent instance_npcname( "alatdglo", instance_id() ) + "::OnDialog1_2";
    	}
    	end;
    	
    OnDialog1_4:
    	npctalk "Let me ask you, the first creatures that have stepped in my newborn land.";
    	instance_announce instance_id(), "[Morocc] Let me ask you, the first creatures that have stepped in my newborn land.",bc_map, 0xFF0000;
    	sleep 1500;
    	npctalk "How'd you like to follow me and watch the birth of a new world?";
    	instance_announce instance_id(), "[Morocc] How'd you like to follow me and watch the birth of a new world?",bc_map, 0xFF0000;
    	sleep 1500;
    	donpcevent instance_npcname( "alatdglo", instance_id() ) + "::OnDialog1_5";
    	end;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	set .moTalking, 0;
    	end;
    }
    
    1@eom,95,125,5	script	Loki::alatdglo	4_M_BLACKMAN,2,2,{
    	end;
    	
    OnDialog1_2:
    	npctalk "Enough with your nonsense. Just say you like destroying things!";
    	instance_announce instance_id(), "[Loki] Enough with your nonsense. Just say you like destroying things!", bc_map, 0x00FF99;
    	sleep 1500;
    	npctalk "Create a new world and become its creator? If this is the new world you're talking about, then I'm disappointed!";
    	instance_announce instance_id(), "[Loki] Create a new world and become its creator? If this is the new world you're talking about, then I'm disappointed!", bc_map, 0x00FF99;
    	sleep 1500;
    	npctalk "Even if you burn your body, you power is not as potent as that of Ymir of the Genesis!";
    	instance_announce instance_id(), "[Loki] Even if you burn your body, you power is not as potent as that of Ymir of the Genesis!",bc_map, 0x00FF99;
    	sleep 1500;
    	npctalk "Just the fact that you had to steal Yggdrasil shows you lack of creativity!";
    	instance_announce instance_id(), "[Loki] Just the fact that you had to steal Yggdrasil shows you lack of creativity!",bc_map, 0x00FF99;
    	sleep 1500;
    	npctalk "Take a look at yourself. You're delusional if you think that you look like a creator of any kind!";
    	instance_announce instance_id(), "[Loki] Take a look at yourself. You're delusional if you think that you look like a creator of any kind!",bc_map, 0x00FF99;
    	sleep 1500;
    	
    	donpcevent instance_npcname( "alatdgny", instance_id() ) + "::OnDialog1_3";
    	end;
    	
    OnDialog1_5:
    	disablenpc instance_npcname( "alatdgmo", instance_id() );
    	npctalk "Are you running?!";
    	instance_announce instance_id(), "[Loki] Are you running?!",bc_map, 0x00FF99;
    	
    	disablenpc strnpcinfo(3);
    	sleep 1500;
    	set 'tdgMercenaryOn, 1;
    		
    	donpcevent instance_npcname( "temple_demon_god", instance_id() ) + "::OnSecondFloorOn";
    	end;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,93,122,5	script	Nydhogg::alatdgny	4_F_NYDHOG,{
    	if (getcharid(0) == getpartyleader(getcharid(1),2)) {
    		mes "[Nydhogg]";
    		mes "Listen carefully.";
    		next;
    		mes "[Nydhogg]";
    		mes "Morocc will soon overpower us all. We need to defeat him before it arrives.";
    		next;
    		mes "[Nydhogg]";
    		mes "We need your powers to defeat him. We're not strong enough to defeat him by our own.";
    		next;
    		mes "[Nydhogg]";
    		mes "I will offer you my strength in exchange for you to help me.";
    		close2;
    		summon "Nydhogg",3087,99999999;
    		disablenpc strnpcinfo(3);
    		end;
    	}
    	mes "[Nydhogg]";
    	mes "I'm talking to your leader.";
    	close;
    	
    OnDialog1_3:
    	npctalk "I second that. You're unnecessary to this world. You don't belong here!";
    	instance_announce instance_id(), "[Nydhogg] I second that. You're unnecessary to this world. You don't belong here!",bc_map, 0x0000FF;
    	sleep 1500;
    	npctalk "Even Yggdrasil denies your existence!";
    	instance_announce instance_id(), "[Nydhogg] Even Yggdrasil denies your existence!",bc_map, 0x0000FF;
    	sleep 1500;
    	npctalk "As the Guardian of Yggdrasil, I have to erase your existence from this world.";
    	instance_announce instance_id(), "[Nydhogg] As the Guardian of Yggdrasil, I have to erase your existence from this world.",bc_map, 0x0000FF;
    	sleep 1500;
    
    	donpcevent instance_npcname( "alatdgmo", instance_id() ) + "::OnDialog1_4";
    	end;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	set .endTalking, 0;
    	end;
    }
    
    1@eom,102,124,3	script	Morocc::alatdgmoa	3097,2,2,{
    	end;
    	
    OnTouch:
    	if(.moTalking == 0)
    	{
    		set .moTalking, 1;
    		npctalk "You exceeded my expectations.";
    		instance_announce instance_id(), "[Morocc] You exceeded my expectations.",bc_map, 0xFF0000;
    		sleep 1500;
    		npctalk "I'll accept your challenge.";
    		instance_announce instance_id(), "[Morocc] I'll accept your challenge.",bc_map, 0xFF0000;
    		sleep 1500;
    		npctalk "I shall drench the land with your flowing blood, and nourish it with your torn flesh.";
    		instance_announce instance_id(), "[Morocc] I shall drench the land with your flowing blood, and nourish it with your torn flesh.",bc_map, 0xFF0000;
    		sleep 1500;
    		npctalk "I'll show you the true depth of despair.";
    		instance_announce instance_id(), "[Morocc] I'll show you the true depth of despair.",bc_map, 0xFF0000;
    		sleep 1500;
    		disablenpc strnpcinfo(3);
    		donpcevent instance_npcname( "temple_demon_god", instance_id() ) + "::OnFourthFloorOn";
    	}
    	end;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	set .moTalking, 0;
    	end;
    }
    
    1@eom,61,149,3	script	Nydhogg::alatdgny2	4_F_NYDHOG,{
    	set .@npcname$, "[Nydhogg]";
    	mes .@npcname$;
    	mes "That was a tought battle.";
    	mes "This may not be good enough, but I hope it'll help your growth.";
    	if(NYDBRYN == 0)
    	{
    		//getexp 
    		next;
    		mes "Nydhogg rewarded you with a large amount of EXP for defeating Brinnaranea.";
    		set NYDBRYN, 1;
    	}
    	close;
    	
    OnDialog2:
    	instance_announce instance_id(), "[Nyddhog] Brinnaranea's influence has dissipated, and a new warp gate has appeared.",bc_map, 0x0000FF;
    	enablenpc instance_npcname( "tdgWarp#2", instance_id() );
    	donpcevent instance_npcname( "temple_demon_god", instance_id() ) + "::OnThirdFloorOn";
    	end;
    	
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,154,155,3	script	Nydhogg::alatdgny3	4_F_NYDHOG,{
    	set .@npcname$, "[Nydhogg]";
    	mes .@npcname$;
    	mes "Good job again.";
    	mes "This may not be good enough, but I hope it'll help your growth.";
    	if(NYDMUS == 0)
    	{
    		//getexp 
    		next;
    		mes "Nydhogg rewarded you with a large amount of EXP for defeating Muspelskoll.";
    		set NYDMUS, 1;
    	}
    	close;
    	
    OnDialog3:
    	instance_announce instance_id(), "[Nyddhog] Muspelskoll's influence has dissipated, and a new warp gate has appeared.",bc_map, 0x0000FF;
    	enablenpc instance_npcname( "tdgWarp#4", instance_id() );
    	enablenpc instance_npcname( "alatdgmoa", instance_id() );
    	end;
    	
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,106,197,3	script	Nydhogg::alatdgny4	4_F_NYDHOG,{
    	set .@npcname$, "[Nydhogg]";
    	cutin "ep14_nyd01",1;
    	mes .@npcname$;
    	mes "I don't know what to say...";
    	mes "We stopped the God in waiting.";
    	mes "We ascomplished our goal.";
    	mes "But I'm still unnerved...";
    	next;
    	mes .@npcname$;
    	mes "This world is created in the mind of Morocc.";
    	mes "He'll live forever in this garden he couldn't finish.";
    	next;
    	mes .@npcname$;
    	mes "He probably doesn't know his body is destroyed forever.";
    	mes "He was far too ambitious, even for him.";
    	mes "He wanted to create a new world and become its creator.";
    	next;
    	mes .@npcname$;
    	mes "But he couldn't create anything on his own.";
    	mes "He abandonned his demon body, just to become a mere facsimile of an existing god.";
    	next;
    	mes .@npcname$;
    	mes "He look the snape of a man.";
    	mes "He wasn't creative enough to reinvent the concept of a God.";
    	mes "He was some kind of paradox.";
    	next;
    	mes .@npcname$;
    	mes "Now we need to get out of this trap in time and get back to reality.";
    	mes "This world only exists in the Demon's mind, and this day will repeat endlessly.";
    	next;
    	mes .@npcname$;
    	mes "Everyone entering this world will be dragged in this loop.";
    	mes "In that sense, he succeeded in making his own world.";
    	next;
    	mes .@npcname$;
    	mes "I've talked to much.";
    	mes "The commander must be waiting. Let me validate your feat so you can report to him.";
    	mes "You did a great job today.";
    	cutin "", 255;
    	next;
    	getpartymember getcharid(1),2;
    	for( set .@i, 0; .@i < $@partymembercount; set .@i, .@i+1 )
    		if( attachrid( $@partymemberaid[.@i] ) && TDG_INSTANCE_ID > 0){
    			set TDG_INSTANCE_ID, -1;
    			getitem 22537,1;
    			getitem 6715,1;
    			getitem 22567,3;
    		}
    	instance_destroy instance_id();
    	close;
    
    OnInstanceInit:
    OnInit:
    	disablenpc strnpcinfo(3);
    	end;
    }
    
    1@eom,91,120	warp	tdgWarp#1	2,2,1@eom,61,88
    1@eom,69,149	warp	tdgWarp#2	2,2,1@eom,98, 115
    1@eom,105,120	warp	tdgWarp#3	2,2,1@eom,133,93
    1@eom,147,156	warp	tdgWarp#4	2,2,1@eom,98, 115
    1@eom,98,127	warp	tdgWarp#5	2,2,1@eom,101,176

     

  10. 13 hours ago, lllaaazzz said:

    ????

    in your data.grf everything in your skillinfoz folder

    skilldb.txt

    skill_tree.txt

    skill.c / skill.h

    battle.c / battle.h

    The job name of Star Emperor and Soul Reaper (just below the character name) appears in Korean, also the AB skills Vituperatum and Convenio descriptions appear in Korean too. I searched through the GRF folders that you mention but i cant find where to add/translate those.

  11. 1 hour ago, utofaery said:

    Not the hercules one but this one..

    sorry for posting different code

     

     

    I'm getting this errors now.

    Edit: Fixed the errors but i still doesn't work. Tested with a Champion then a Sura: the Dangerous Soul Collect/Zen skill still has the same fixed cast on both.

    6565.PNG

  12. 56 minutes ago, utofaery said:

    n0tttt has given a little mistakes i think:

    ~ << this should be >> !

    Try the below one :  (and remember to recompile after you change anything in source)

    
    /*==========================================
     * Does cast-time reductions based on dex, item bonuses and config setting
     *------------------------------------------*/
    int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
    	double time = skill_get_cast(skill_id, skill_lv);
    
    	nullpo_ret(bl);
    
    	struct map_session_data *sd = BL_CAST(BL_PC, bl);
    	struct status_change *sc = status_get_sc(bl);
    	int reduce_cast_rate = 0;
    	uint8 flag = skill_get_castnodex(skill_id);
    
    	if(sd) {
    
    		if(sd->class_ & !MAPID_THIRDMASK) {
    			// Calculate base cast time (reduced by dex)
    			if (!(flag&1)) {
    
    				int scale = battle_config.castrate_dex_scale - status_get_dex(bl);
    				if (scale > 0)	// not instant cast
    					time = time * (float)scale / battle_config.castrate_dex_scale;
    				else
    					return 0; // instant cast
    			}
    			if (!(flag&4) && sd->castrate != 100)
    				reduce_cast_rate += 100 - sd->castrate;
    			// Skill-specific reductions work regardless of flag
    			for (const auto &it : sd->skillcastrate) {
    				if (it.id == skill_id) {
    					time += time * it.val / 100;
    					break;
    				}
    			}
    			// These cast time reductions are processed even if the skill fails
    			if (sc && sc->count) {
    				// Magic Strings stacks additively with item bonuses
    				if (!(flag&2) && sc->data[SC_POEMBRAGI])
    					reduce_cast_rate += sc->data[SC_POEMBRAGI]->val2;
    				// Foresight halves the cast time, it does not stack additively
    				if (sc->data[SC_MEMORIZE]) {
    					if(!(flag&2))
    						time -= time * 50 / 100;
    					// Foresight counter gets reduced even if the skill is not affected by it
    					if ((--sc->data[SC_MEMORIZE]->val2) <= 0)
    						status_change_end(bl, SC_MEMORIZE, INVALID_TIMER);
    				}
    			}
                time = time * (1 - (float)reduce_cast_rate / 100);
    		}
    	}
    
    	// config cast time multiplier
    	if (battle_config.cast_rate != 100)
    		time = time * battle_config.cast_rate / 100;
    	// return final cast time
    	time = max(time, 0);
    	//ShowInfo("Castime castfix = %f\n",time);
    
    	return (int)time;
    }

     

    This was tested working in hercules:

      Hide contents

    /*==========================================
     * Does cast-time reductions based on dex, item bonuses and config setting
     *------------------------------------------*/
    static int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv)
    {
        int time = skill->get_cast(skill_id, skill_lv);

        nullpo_ret(bl);
    //xsa#ifndef RENEWAL_CAST
    //xsa    {
            struct map_session_data *sd;

            sd = BL_CAST(BL_PC, bl);
            if ( (sd)->job & !MAPID_THIRDMASK ) {//xsa
    //xsa        if(sd->class_ & ~MAPID_THIRDMASK) {//xsa
                // calculate base cast time (reduced by dex)
                if( !(skill->get_castnodex(skill_id, skill_lv)&1) ) {
                    int scale = battle_config.castrate_dex_scale - status_get_dex(bl);
                    if( scale > 0 ) // not instant cast
                        time = time * scale / battle_config.castrate_dex_scale;
                    else
                        return 0; // instant cast
                }

                // calculate cast time reduced by item/card bonuses
                if( !(skill->get_castnodex(skill_id, skill_lv)&4) && sd )
                {
                    int i;
                    if( sd->castrate != 100 )
                        time = time * sd->castrate / 100;
                    for( i = 0; i < ARRAYLENGTH(sd->skillcast) && sd->skillcast.id; i++ )
                    {
                        if( sd->skillcast.id == skill_id )
                        {
                            time+= time * sd->skillcast.val / 100;
                            break;
                        }
                    }
                }
            }//xsa
    //xsa    }
    //xsa#endif

        // config cast time multiplier
        if (battle_config.cast_rate != 100)
            time = time * battle_config.cast_rate / 100;
        // return final cast time
        time = max(time, 0);

        //ShowInfo("Castime castfix = %d\n",time);
        return time;
    }

     1234.PNG.0ef07905a66dc267250df1fc1178bc7f.PNG

    Im getting this errors when recompiling.

    4321.PNG

  13. 29 minutes ago, utofaery said:

    1 to 3 need source

    1. Is this for server wide?

    2. or is it specific for pvp map / gvg map only?

    3. not for 3rd job the insta cast?? if dex 150?

     

    this one is easier.

    4.  Alternatively you could create a custom item with the command to check for Thirdjob

    and give that custom item these two item script 

            bonus bVariableCastrate,-100;
            bonus bFixedCastrate,-100;

    and only give this custom item to non third job

    Yes, server wide.
    Nop, 3rd Jobs have to keep their cast as it is. 2nd jobs have to be able to reach instant cast at 150 dex with all their skills.

    I like the item script but its not practical, players would lose an item slot. What i want i saw it in other servers so i know its possible but i think is very difficult.

  14. 22 minutes ago, lllaaazzz said:

    Just to be clear, 

    you want third job to have fixed and variable cast time

    but you want trans class to be able to hit insta cast with 150 dex? But Third cant?

     

    Im assuming this is for a split pvp ? 

     

    Yes, i want 3rd job pvp and woe, and 2nd job pvp woe, so i need 2nd jobs to have a separated cast formulla.

    • Like 1
  15. 1) How can i remove or replace certain achievement rewards?

     

    2) How can i make the Instant Cast requirements depend on the job, what i exactly want to do is keep the 3rd jobs renewal cast as it is, but if you are a 2nd Job your cast would be depending on your dex only. Fixed and Variable cast times like always on 3rd jobs, but only Variable and 150 dex required for instant cast on 2nd jobs.

    Thanks in advance.

×
×
  • Create New...