Jump to content

Helena

Members
  • Content Count

    238
  • Joined

  • Last visited

Posts posted by Helena


  1. Hello all.

     

    I have a request to ask. The idea is pretty simple, I am using a shared guild town for players that are victors of the war of emperium, i want to initiate a few checks, but im not sure how to merge them.

     

    1) no one can @load if WoE is active

    2) if woe is not active only guild possessors can @load.

     

    This is what I got so far, it works (1) but I dont know how to initiate (2) the castle owners only warp. I thought i figured it out, but unfortunately it isn't working. Players who are not in a guild or in a guild that doesnt own the castle, can still warp inside.

     

    What did i miss? Thanks a lot for the help! ^^

     

    -	script	SiegeWarp	-1,{OnInit:    setmapflag "guildtown", mf_loadevent;	set .map_list$, "guildtown";	end; OnPCLoadMapEvent:if ( compare( .map_list$,strcharinfo(3) ) == 0 ) end;	if(agitcheck()){	dispbottom "you can not warp into the War Town map while the War of Emperium is active";	SavePoint "prontera",156,184;	warp "prontera",156,184;	end; if (getcharid(2) != 0 && getcharid(2) == getcastledata("prtg_cas01",1)) {	warp "guildtown",91,102;	end;}if (getcharid(2) != 0 && getcharid(2) == getcastledata("payg_cas01",1)) {	warp "guildtown",91,102;	end;}if (getcharid(2) != 0 && getcharid(2) == getcastledata("aldeg_cas04",1)) {	warp "guildtown",91,102;	end;}if (getcharid(2) != 0 && getcharid(2) == getcastledata("gefg_cas04",1)) {	warp "guildtown",91,102;	end;} dispbottom "you can only enter this map if you are in one of the Guilds that hold a castle!";	sleep2 1000;	atcommand "@refresh";	end; }}

     


  2. Sorry for the double post, but I noticed some weird behavior in my @whodrops... I tried to @whodrops ice pick and lord of the death and RSX show up twice. If I increase the max_search to a higher value, all results show up several times... they're only once in my mob_db and only drop 1 ice pick. O.o

     

    This is also the case with angel wing, but it isn't with evil wing... I wonder what the problem is. Should this be in bug reports?


  3. For some reason my browser crashes when quoting, but that works nicely Garr !

     

    The only thing that doesn't change along is the name. Example when i type in Ice Pick, the first page shows fine but after clicking 'next' it doesnt display a name (all other info is present though).

     

    What can I do to fix that? Thanks!

     

    Nevermind, solved it by changing the  "Name: "+.@itemname$[.@i];" into "Name: "+.@itemname$;"

     

    Thank you so much, Garr! :)


  4. Hello,

     

    I am using an item with a callfunc attached to it, it is like a in-game database system. Its really simply but I like the way it turned out.

    Sadly there are 2 problems.

     

    1) It searches for japanese name, this is how i want it but if the item does not exist the search box still appears but with all values set to zero. I know a check can be easily be done if i make it search for ID but is it also possible with name?

     

    2) It only shows one result but in RO there are several items with the same name. Take Flapping Angel Wing for example, there are two of those but only one shows up. Is there a way to make all options show in the dialogue?

     

    Sorry if this is a impossible script but thanks so much for trying nonetheless. ^^

     

     

    L_Item:next;dispbottom "Initiating Item Database...";progressbar "0xRRGGBB",2;mes "Database successfully loaded. What Item do you want to learn about?:";mes " ";mes "Please ^ff0000only input the Item's full name^000000 or there will be incorrect results!";input .@itemname$;query_sql "SELECT ID, price_buy, price_sell, weight, atk, defence, slots FROM item_db WHERE name_japanese = '"+ escape_sql(.@itemname$) +"'", @iid$, .@buy, .@sell, .@weight, .@atk, .@defence, .@slots;		if(getiteminfo(.@itemnum, 0) == -1)    // item does not exist	next;	mes "Name: "+.@itemname$;	mes "Weight: "+.@weight;	mes "ATK: "+.@atk;	 mes "DEF: "+.@defence;	mes "Slots: "+.@slots;	mes "Buying Price: "+.@buy;	mes "Selling Price: "+.@sell;	next;	goto L_menu2; L_menu2:menu "Which monster drops it?",-,"Search for another item",L_Item,"Exit",L_later2; atcommand "@whodrops "+@iid$;goto L_menu2; L_later2:	close; }

  5. Hi community

     

    A bit of a silly question actually, yet one i couldn't find an answer to.

    I noticed that @whodrops is limited to 5 results. Say if you type '@whodrops gold' it will only give the 5 entries with the highest drop chance. Is there a way to make it display all monsters that drop the item?

     

    I've been browsing through the configs but I couldn't find an option for it. Maybe I'm just overlooking it...  :(

     

    Thank you!


  6. Hi Hercules! It's been a while. 

     

    I am using this script and it's giving me headaches, I can't get this one part working. It's a Capture the Flag event, and at the end of the event (when 5 points are made by a team), it is suppose to go to an donpcevent label, but my mapserver keeps saying it cant find it ("CTF::OnEventGameOverClassic").

     

    This is the part of the code that errors, the rest of the script works perfectly fine so I will not include it; it's a huge script.

     

    Help is greatly appreciated :)

     

     

    bat_c01,149,52,5	script	Red Base::red_base	1026,{ getmapxy($@redbase$,$@redbasex,$@redbasey,1);getmapxy($@rbasetouch$,$@rbasetouchx,$@rbasetouchy,0); if (distance($@redbasex,$@redbasey,$@rbasetouchx,$@rbasetouchy) <= 2){ If (@team == 2) {	if ($@flagcarrier$ == strcharinfo(0))	{	movenpc "neutral_flag2",65,116;	set $@nredpt, $@nredpt + 1;	set #fcapt, #fcapt + 1;	set fcapt, fcapt + 1;	set ctfpt, ctfpt + 10;	set tctfpt, tctfpt + 10;	announce "The Blue Team has "+$@nbluept+" points.",bc_map;	announce "The Red Team has "+$@nredpt+" points.",bc_map;	set $@flaggone, 0;	set $@flagcarrier$, "-";		 if ($@nredpt >= 5)		{		mapannounce "bat_c01", "The Red Team has won the match",0;		set $@nbluept, 0;		set $@nredpt, 0;		set $@nblueqt, 0;		set $@nredqt, 0;		set $@flagcarrier$, "-";		set $@nredwin, 1;		donpcevent "CTF::OnEventGameOverClassic";	}}	if ($@reddropped == 1)	 {	 //Return the Flag	movenpc "neutral_flag",134,65;	set $@redgone, 0;	 set $@reddropped, 0;	set #freturn, #freturn + 1;	set freturn, freturn + 1;	announce "The Red Flag has been returned.",bc_map; }}}} bat_c01,50,131,4	script	Blue Base::blue_base	1188,{ getmapxy($@bluebase$,$@bluebasex,$@bluebasey,1);getmapxy($@bbasetouch$,$@bbasetouchx,$@bbasetouchy,0); if (distance($@bluebasex,$@bluebasey,$@bbasetouchx,$@bbasetouchy) <= 2){ If (@team == 1) {	if ($@flagcarrier$ == strcharinfo(0))	{	movenpc "neutral_flag",134,67;	set $@nbluept, $@nbluept + 1;	set #fcapt, #fcapt + 1;	set fcapt, fcapt + 1;	set ctfpt, ctfpt + 10;	set tctfpt, tctfpt + 10;	announce "The Blue Team has "+$@nbluept+" points.",bc_map;	announce "The Red Team has "+$@nredpt+" points.",bc_map;	set $@flaggone, 0;	set $@flagcarrier$, "-";		if ($@nbluept >= 5)		{		mapannounce "bat_c01", "The Blue Team has won the match",0;		set $@nbluept, 0;		set $@nredpt, 0;		set $@nblueqt, 0;		set $@nredqt, 0;		set $@flagcarrier$, "-";		set $@nbluewin, 1;		donpcevent "CTF::OnEventGameOverClassic";	}	}	if ($@bluedropped == 1)	 {	 //Return the Flag //	movenpc "blue_flag",65,116;	set $@bluegone, 0;	set $@bluedropped, 0;	set #freturn, #freturn + 1;	set freturn, freturn + 1;	announce "The Blue Flag has been returned.",bc_map;	 }}}}  OnEventGameOverClassic:set .@classqt, getarraysize($@classic);set .@cctf, 0; over:if (.@cctf < .@classqt){	{	attachrid $@classic[.@cctf];	if (@classic == 1)		{		if (@team == 2)			{			 if ($@redwin == 1)				{				set #win, #win + 1;				set win, win + 1;				}			 if ($@bluewin == 1)				{				set #lose, #lose + 1;				set lose, lose + 1;				}			}		 if (@team == 1)			{			 if ($@redwin == 1)				{				set #lose, #lose + 1;				set lose, lose + 1;				}			 if ($@bluewin == 1)				{				set #win, #win + 1;				set win, win + 1;				}			}		}	 save originmap$, (originx), (originy);	mapwarp "prt_are01","prontera",156,182;	callfunc("setlook2", 6, hair);	callfunc("setlook2", 7, body);	set Hp, charhp;	set Sp, charsp;	set @playing, 0;	set @classic, 0;	set @heal, 0;	detachrid;	set .@cctf, .@cctf + 1;	goto over;	}}for (set .@i, 0; .@i < getarraysize($@classic); set .@i, .@i+1) {	setarray $@classic[.@i], 0;}end;} 

  7. I happen to have a old hercules version were plugins arent supported yet. I have too many src mods to update, :(

     

    Is it just a matter of pasting the following in pc.h to make it work?

     

     

    BUILDIN(cartcountitem){	int nameid, i;	int count = 0;	struct item_data* id = NULL;	 TBL_PC* sd = script->rid2sd(st);	if (!sd) {		script_pushint(st,0);		return false;	}	 if( script_isstringtype(st, 2) ) //item name		id = itemdb->search_name(script_getstr(st, 2));	else //item id		id = itemdb->exists(script_getnum(st, 2));	 if( id == NULL ) {		ShowError("buildin_cartcountitem: Invalid item '%s'.n", script_getstr(st,2));  // returns string, regardless of what it was		script_pushint(st,0);		return false;	}	 nameid = id->nameid;	 for(i = 0; i < MAX_CART; i++)		if(sd->status.cart[i].nameid == nameid)			count += sd->status.cart[i].amount;	 script_pushint(st,count);	return true;} BUILDIN(cartcountitem2){	int nameid, iden, ref, attr, c0, c1, c2, c3;	int count = 0;	int i;	struct item_data* id = NULL;	 TBL_PC* sd = script->rid2sd(st);	if (!sd) {		script_pushint(st,0);		return false;	}	 if( script_isstringtype(st, 2) ) //item name		id = itemdb->search_name(script_getstr(st, 2));	else //item id		id = itemdb->exists(script_getnum(st, 2));	 if( id == NULL ) {		ShowError("buildin_cartcountitem2: Invalid item '%s'.n", script_getstr(st,2));  // returns string, regardless of what it was		script_pushint(st,0);		return false;	}	 nameid = id->nameid;	iden = script_getnum(st,3);	ref  = script_getnum(st,4);	attr = script_getnum(st,5);	c0 = (short)script_getnum(st,6);	c1 = (short)script_getnum(st,7);	c2 = (short)script_getnum(st,8);	c3 = (short)script_getnum(st,9);	 for(i = 0; i < MAX_CART; i++) {		if(sd->status.cart[i].nameid > 0 && sd->status.cart[i].nameid == nameid &&		   sd->status.cart[i].identify == iden && sd->status.cart[i].refine == ref &&		   sd->status.cart[i].attribute == attr && sd->status.cart[i].card[0] == c0 &&		   sd->status.cart[i].card[1] == c1 && sd->status.cart[i].card[2] == c2 &&                   sd->status.cart[i].card[3] == c3 )			count += sd->status.cart[i].amount;	 }	 script_pushint(st,count);	return true;}

  8.  

     

    -	script	Vanilla1	-1,{OnPCLoadMapEvent:getmapxy(.@map$,.@mapx,.@mapy,0);if(.@map$ == "prtg_cas01"){	for(set .@i,0; .@i < getarraysize(.itemcheck); set .@i, .@i + 1){		if(countitem(.itemcheck[.@i])){			dispbottom "[ Info ] : item ["+getitemname(.itemcheck[.@i])+"] found (Inventory). Kicking..";            			warp "prontera",200,180;			end; 		}		if(query_sql("SELECT `nameid` FROM `cart_inventory` WHERE `char_id` = " + getcharid(0), .itemcheck[0]) {			dispbottom "[ Info ] : item ["+getitemname(.itemcheck[.@i])+"] found (Cart). Kicking..";            			warp "prontera",200,180;			end;		}    }end;OnInit:setarray .itemcheck[0],2383,2204,20025,20026,20027,20028,20029,20030,20031,20032,20033;end;}prtg_cas01    mapflag    loadevent

     

    Hi angelmelody. Thank you so much that works!


  9.  

    Maybe you want to alter these confs:

     

    conf/map-server.conf

    // Database autosave time// All characters are saved on this time in seconds (example:// autosave of 60 secs with 60 characters online -> one char is saved every// second)autosave_time: 300// Min database save intervals (in ms)// Prevent saving characters faster than at this rate (prevents char-server// save-load getting too high as character-count increases)minsave_time: 100// Apart from the autosave_time, players will also get saved when involved// in the following (add as needed):// 1: After every successful trade// 2: After every vending transaction// 4: After closing storage/guild storage.// 8: After hatching/returning to egg a pet.// 16: After successfully sending a mail with attachment// 32: After successfully submitting an item for auction// 64: After successfully get/delete/complete a quest// 128: After every buying store transaction// 256: After every bank transaction (deposit/withdraw)// NOTE: These settings decrease the chance of dupes/lost items when there's a// server crash at the expense of increasing the map/char server lag. If your// server rarely crashes, but experiences interserver lag, you may want to set// these off.save_settings: 511

     

    Hi Jabote, I tried, but alas. :( It still detects long deleted items from my cart, like my brynhild from 5 hours ago.

     

    This is my script, did I do it wrong somewhere?

     

     

    -	script	Vanilla1	-1,{OnPCLoadMapEvent:getmapxy(.@map$,.@mapx,.@mapy,0);if(.@map$ == "prtg_cas01"){    for(set .@i,0; .@i < getarraysize(.itemcheck); set .@i, .@i + 1){        if(countitem(.itemcheck[.@i])){            dispbottom "[ Info ] : item ["+getitemname(.itemcheck[.@i])+"] found (Inventory). Kicking..";                        warp "prontera",200,180;            end;            }		query_sql("SELECT `nameid` FROM `cart_inventory` WHERE `char_id` = " + getcharid(0), .itemcheck[0]);            dispbottom "[ Info ] : item ["+getitemname(.itemcheck[.@i])+"] found (Cart). Kicking..";                        warp "prontera",200,180;           end;		}	}end;OnInit:setarray .itemcheck[0],2383,2204,20025,20026,20027,20028,20029,20030,20031,20032,20033;end;}prtg_cas01	mapflag	loadevent 

     


  10. There's no current script command to retrieve the item list from a character's cart (or storage, or gstorage if ever needed), so you'd have to rethink and hope the player's cart has been saved previously to entering the WoE map and do a SQL query like this:

     

    query_sql("SELECT `nameid` FROM `cart_inventory` WHERE `char_id` = " + getcharid(0), .@itemids);

     

    You'll get all Item IDs the player has on this cart on the array .@itemids, so you have now to loop through it and check for every blacklisted item on each entry.

     

    Great it works, thanks!! :D

     

    Problem though that even when i empty my cart and relog, it still regocnized the item in the cart... :(

    Is there any solution for that?


  11. Hello Hercules

     

    I have a question, I have this script, what it does in short: it kicks out players that have certain items in their inventory.

    but there is one problem with it. If I have the items in the array in my cart, I don't get kicked out. So, in this case of war of emperium, if i go to the emp-room, take my items out of my cart i can equips or use them just fine! :(

     

    How can i also disable cart items?

     

     

     

    -	script	Restrict	-1,{OnPCLoadMapEvent:getmapxy(.@map$,.@mapx,.@mapy,0);if(.@map$ == "prtg_cas01"){    for(set .@i,0; .@i < getarraysize(.itemcheck); set .@i, .@i + 1){        if(countitem(.itemcheck[.@i])){            dispbottom "[ Info ] :  ["+getitemname(.itemcheck[.@i])+"] found. Kicking you out!";                        warp "prontera",200,180;            end;            }        }    }end;OnInit:setarray .itemcheck[0],2383,2204,30873,20009,20010,etc;end;}prtg_cas01	mapflag	loadevent 

     


  12. Hello Hercules,

     

    I was wondering who can recommend me a good hosting provider. Since AsuraHosting is dead i need to move my server to somewhere else.

     

    I do not really have many requirements, just that the connection is fast, they offer server transfers and that they have VNC viewer. (Please don't tell me VNC slows down your server, it might be so (even though I never noticed a difference), but I really love being able to control my server without putty, so yes I think it is worth it).

     

    I've tried Pony VPS but their ping was really bad for me, I also tried Trinity but they had no VNC even though they told me they did. I've contacted AspireHosting a week ago but never had a reply from them, and WanHosting but they use the same main host as Pony VPS. Asura was (despite their bad support) really my #1. I'd like something similar.

     

    Please give me some good recommendations. I would be a long-term customer. Thanks! :)


  13.  

    Thanks kisuka, I'll try to set up cloudflare. :)

     

    Okay new update, after some testing with someone of the board we noticed that it's only the GM accounts that are loading slow. Level/Group 0 and 1 are okay, but past 2, it starts to cause slow loadings. That pretty much leads me to think that the sql queries the GM needs to progress are too much...

    I am not having slowness issues with my GM accounts, maybe if you check logs, and there's many player online, it can slow down the loading.

     

    Hm there was like 45 online... is that considered many?

     

    (Cloudflare didnt make a difference btw)


  14. Hi Hercules,

     

    I was wondering if someone could help me. I'm using the following script but I would like @join #main and @channel leave #main to be added into it. It's just difficult because #main doesn't go by on and off.

     

    Thanks! Help is much appreciated!

     

    header    .@npcname$ = "["+ strnpcinfo(1) +"]";//    dispbottom atcommand_login +""; // debugging    mes .@npcname$;    mes "Hello, "+strcharinfo(0)+"!";    mes "I can permanently enable some commands you often use, this is useful so you won't need to type the commands upon each log in!";	next;    mes .@npcname$;    mes "The setting(s) will remain enabled or disabled until you talk to me again and want me to un-do the change.";    next;    for ( .@i = 0; .@i < .total; .@i++ )        .@menu$ = .@menu$ + .atname$[.@i] +" ["+( ( atcommand_login & 1 << .@i )? "^00BB22On^000000" : "^FF2200Off^000000" )+"] :";    .@s = select( .@menu$ ) -1;    mes .@npcname$;    mes "Status: "+( ( atcommand_login & 1 << .@s )? "^00BB22On^000000" : "^FF2200Off^000000");    next;    mes .@npcname$;	mes "What do you want to do?";    if ( select( "I'd like to "+( ( atcommand_login & 1 << .@s )? "^FF2200disable^000000": "^00BB22enable^000000"  )+" it!", "Nothing." ) == 2 ) {        mes "See ya.";        close;    }    if ( atcommand_login & 1 << .@s ) {        mes .atname$[.@s] +" is now ^FF2200disabled^000000.";        atcommand "@"+ .atcommand$[.@s] +" off";    }    else {        mes .atname$[.@s] +" is now ^00BB22enabled^000000.";        atcommand "@"+ .atcommand$[.@s] +( ( .@s == 1 )? "on": "" );    }    atcommand_login = atcommand_login ^ 1 << .@s;    close;OnPCLoginEvent:    if ( !atcommand_login ) end;    for ( .@i = 0; .@i < .total; .@i++ ) {        if ( atcommand_login & 1 << .@i ) {            atcommand "@"+ .atcommand$[.@i] +( ( .@i == 1 )? " on": "" );            dispbottom .atname$[.@i] +" is now enabled";        }    }    end;OnInit:    setarray .atname$, "- @autoloot", "- @noask", "- @noks", "- @showexp";    setarray .atcommand$, "autoloot", "noask ", "noks", "showexp";    .total = 4;    end;}

  15. Thanks kisuka, I'll try to set up cloudflare. :)

     

    Okay new update, after some testing with someone of the board we noticed that it's only the GM accounts that are loading slow. Level/Group 0 and 1 are okay, but past 2, it starts to cause slow loadings. That pretty much leads me to think that the sql queries the GM needs to progress are too much...


  16. I think it's the theme. Which is weird because I don't have any animations, gifs or whatsoever, and it worked fluently on my previous host other than the occassional downtimes.

     

    My offer still counts for anyone who is able to clean it up.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.