Euphys WoE Controller 30 Minutes Interval Support

ProjectX

New member
Messages
21
Points
0
Hello! Just want to post here and maybe someone can help me figure this out. I already gave up so I need to ask and hopefully someone can help.

I'm trying to modify the WoE Controller https://github.com/HerculesWS/Hercules/blob/master/npc/custom/woe_controller.txt
To support a 30 minutes interval for start and end time.

This is part of the code.

case 1:
mes "[New Session]";
if (.Size > 127) {
mes "You have already reached the maximum of 32 sessions.";
next;
break;
}
mes "Select a day.";
next;
set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
mes "[New Session]";
mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,0; .@i<23; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
set .@start, select(.@menu$)-1;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,.@start+1; .@i<24; set.@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
set .@end, select(.@menu$)+.@start;
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (.@day == $WOE_CONTROL[.@i] &&
((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
(.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
(.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
mes "[New Session]";
mes "The chosen times overlap with an existing session.";
next;
set .@d,1;
break;
}
if (.@d) { set .@d,0; break; }




This is what I have right now

set .@menu$,"";
for(set .@i,0; .@i<48; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i/2,1)+":"+(.@i%2==0?"00":"30");
set .@start, select(.@menu$)-1;
set .@start, .@start*30;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,.@start/30+1; .@i<48; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i/2,1)+":"+(.@i%2==0?"00":"30");
set .@end, select(.@menu$)-1;
set .@end, .@end*30;




Another attempt 

for(set .@i,0; .@i<48; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+sprintf("%02d:%02d", .@i/2, .@i%2*30);
set .@start, select(.@menu$)-1;
set .@start, .@start*30;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,.@start/30+1; .@i<48; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+sprintf("%02d:%02d", .@i/2, .@i%2*30);
set .@end, select(.@menu$)-1;
set .@end, .@end*30;




Output in-game. Can anyone point me in the right direction?

image.png

 
I changed the time slots to be in 30-minute intervals rather than hourly increments.

Here's the code. I haven't tested it. Please let us know if it works. ~

Code:
case 1:
			mes "[New Session]";
			if (.Size > 127) {
				mes "You have already reached the maximum of 32 sessions.";
				next;
				break;
			}
			mes "Select a day.";
			next;
			set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
			mes "[New Session]";
			mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
			next;
			set .@menu$,"";
			for(set .@i,0; .@i<47; set .@i,.@i+2)
				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
			set .@start, select(.@menu$)-1;
			mes "[New Session]";
			mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
			next;
			set .@menu$,"";
			for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
			set .@end, select(.@menu$)+.@start;
			for(set .@i,0; .@i<.Size; set .@i,.@i+4)
				if (.@day == $WOE_CONTROL[.@i] &&
				   ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
				    (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
				    (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
					mes "[New Session]";
					mes "The chosen times overlap with an existing session.";
					next;
					set .@d,1;
					break;
				}
			if (.@d) { set .@d,0; break; }

 
I changed the time slots to be in 30-minute intervals rather than hourly increments.

Here's the code. I haven't tested it. Please let us know if it works. ~

case 1:
mes "[New Session]";
if (.Size > 127) {
mes "You have already reached the maximum of 32 sessions.";
next;
break;
}
mes "Select a day.";
next;
set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
mes "[New Session]";
mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,0; .@i<47; set .@i,.@i+2)
set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
set .@start, select(.@menu$)-1;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
set .@end, select(.@menu$)+.@start;
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (.@day == $WOE_CONTROL[.@i] &&
((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
(.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
(.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
mes "[New Session]";
mes "The chosen times overlap with an existing session.";
next;
set .@d,1;
break;
}
if (.@d) { set .@d,0; break; }

Code:
case 1:
			mes "[New Session]";
			if (.Size > 127) {
				mes "You have already reached the maximum of 32 sessions.";
				next;
				break;
			}
			mes "Select a day.";
			next;
			set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
			mes "[New Session]";
			mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
			next;
			set .@menu$,"";
			for(set .@i,0; .@i<47; set .@i,.@i+2)
				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
			set .@start, select(.@menu$)-1;
			mes "[New Session]";
			mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
			next;
			set .@menu$,"";
			for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
			set .@end, select(.@menu$)+.@start;
			for(set .@i,0; .@i<.Size; set .@i,.@i+4)
				if (.@day == $WOE_CONTROL[.@i] &&
				   ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
				    (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
				    (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
					mes "[New Session]";
					mes "The chosen times overlap with an existing session.";
					next;
					set .@d,1;
					break;
				}
			if (.@d) { set .@d,0; break; }
Thank you for trying. I got an error on the floor() part I changed it to atoi but checking I got this menu and the time is not matching either.

image.png

New code:

Code:
case 1:
            mes "[New Session]";
            if (.Size > 127) {
                mes "You have already reached the maximum of 32 sessions.";
                next;
                break;
            }
            mes "Select a day.";
            next;
            set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
            mes "[New Session]";
            mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
            next;
            set .@menu$,"";
            for(set .@i,0; .@i<47; set .@i,.@i+2)
                set .@menu$, .@menu$+" ~ "+Add_Zero(atoi(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
            set .@start, select(.@menu$)-1;
            mes "[New Session]";
            mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
            next;
            set .@menu$,"";
            for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
                    set .@menu$, .@menu$+" ~ "+Add_Zero(atoi(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
            set .@end, select(.@menu$)+.@start;
            for(set .@i,0; .@i<.Size; set .@i,.@i+4)
                if (.@day == $WOE_CONTROL[.@i] &&
                   ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
                    (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
                    (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
                    mes "[New Session]";
                    mes "The chosen times overlap with an existing session.";
                    next;
                    set .@d,1;
                    break;
                }
            if (.@d) { set .@d,0; break; }
 
Back
Top