Root Admin Muratus del Mur Posted May 30, 2010 Root Admin Report Posted May 30, 2010 This is not sample code, it is just a note on a possible quest concept i was thinking. by using uv(location) on an item, to determine someones current location, you could create a list of locations and based on that you could return a message like "you are getting close" or a direction indication like "go left until you find a tree". In this way you could create items like a compass that will point you to a predefined location the editor picks, or quests like treasure hunting. If you combine this with the storage and the date functions you could for example ask someone to find the propper place for some seeds to grow, considering soil, light or anything else you want. The quester will have to wait one day in a place to see if the seeds start to grow or not, then try an other one. The one that manages to get them grow first wins. Other things like a dynamic map direction items are possible in the same way, all you need to do is to use the location of the current player and prepare a list of responses based on that location. Maybe someone can point out why this might not work, or provide a sample code for it. Dragual 1 Quote
Handy Pockets Posted May 30, 2010 Report Posted May 30, 2010 Mur, you are giving it away. Phantom Orchid 1 Quote
Root Admin Muratus del Mur Posted May 31, 2010 Author Root Admin Report Posted May 31, 2010 i was discussing a topic about a possible compass in md, when i realised how many things could be done with the location spell combined with inventory items. I didn't saw anyone using it so i thought to place it on forum. Sorry if i spoiled any of your ongoing quests. Quote
Laphers Posted September 25, 2010 Report Posted September 25, 2010 (edited) My attempt at creating a compass is up now [url="http://magicduel.invisionzone.com/topic/8032-missing-cards/"]here[/url]. Once it has run, I will post some of the code here. Any comments or questions are welcome. Create an array of locations. This was originally two functions that were used at different points in the quest but I realized that I could combine them. This is the result. [code]function create_locations(@vm=array('all')){ //allowed values: nomansland, marindbell, mda, labyrinth, tribunal, loreroot, golemus, necro @vl=array(); if(in_array('nomansland', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Paper Cabin", "1_-2x-1_2", "-20", "-10"), array("Clash of Ages", "1_-1x-2_1", "-10", "-20"), array("Gazeebo of Equalibrium", "1_0x0_1", "0", "0"), array("Winds Game", "1_2x1_1", "20", "10") ); } if(in_array('marindbell', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Marble Dale Park", "1_0x2_1", "0", "20"), array("Marinds Marble Stairs", "1_-1x2_1", "-10", "20"), array("Marinds Roundabout", "1_-1x3_1", "-10", "30"), array("Willows Shop", "1_1x3_1", "10", "30"), array("Willows Shop Interior", "1_1x3_2", "10", "31"), array("Sages Keep", "1_3x4_1", "30", "40"), array("Winds Sanctuary", "1_4x4_1", "40", "40"), array("Angien Shrine", "1_2x4_1", "20", "40) ); } if(in_array('mda', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Heresy Lane", "3_4x-4_1", "50", "50"), array("Fountain of Dark Vibrations", "3_2x-2_1", "30", "70"), array("Alches Alley", "3_0x-2_1", "10", "70"), array("Alches Alley W", "3_-2x-3_1", "-10", "60"), array("MDA Alley", "3_1x0_1", "20", "90"), array("Fountain of the Lost Path", "3_1x3_15","20", "115"), array("Fountain of the Lost Path NW", "3_1x3_6","19", "116"), array("MDA East Wall", "3_1x3_14", "23", "111"), array("MDA Study Room", "4_1x2_7", "19", "111"), array("P"."ublic Bathroom", "4_1x2_11", "18", "113"), array("MDA Cellar", "4_1x2_27", "19", "113"), array("Fountain of the Lost Path NW", "3_1x3_6", "19", "116"), array("Golden G"."lobe Gazeebo", "3_1x3_17", "18", "115"), array("Marinds P"."rivate Bathroom", "4_1x2_19", "19", "113") ); //Anyone know why I don't include Marind's Room clickable? } if(in_array('labyrinth', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Labyrinth Entrance", "6_0x-5_1", "10", "100"), array("Labyrinth E"."xit", "6_0x4_1", "-90", "100") ); } if(in_array('tribunal', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Portal to Tribunal Lands", "7_gate_1", "40", "10"), array("Outs"."ide Tribunal Pub", "7_localpub_1", "120", "-30"), array("Tribunal Kitchen", "7_kitchen_1", "110", "-20") ); } if(in_array('loreroot', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Ash Arch", "1_-3x0_1", "-30", "0"), array("Lore Manor Interior", "1_-3x2_2", "-30", "20") ); } if(in_array('golemus', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Siege Crest", "1_-5x-2_1", "-50", "-20"), array("Drachorns Lair", "1_-4x-3_1", "-40", "-30"), array("Wraiths Wreck", "1_-5x-3_1", "-50", "-30"), array("Ivory Lighthou"."se", "1_-5x-4_1", "-50", "-40") ); } if(in_array('necro', @vm) OR in_array('all', @vm)){ array_push(@vl, array("Well of Tears", "1_1x-2_1", "10", "-20"), array("Way of Cleansing", "1_1x-1_1", "10", "-10"), array("Demented Ascent","1_2x-2_1", "20", "-20"), array("Accursed Growth", "1_2x-3_1", "20", "-30"), array("Island of Seclusion", "1_3x-3_1", "30", "-30"), array("Trial of Agony", "1_3x-4_1", "30", "-40"), array("Deathmarrow", "1_3x0_1", "30", "0") ); } return @vl; }[/code] Distance and direction [code]//@vf - user's location //@vg - location of target item (card) //@vw - array of locations function find_degree(@vf, @vg, @vw){ if(@vf != @vg){ foreach(@vw as @vu){ if(@vu[0] == @vf || @vu[0] == @vg){ if(@vu[0] == @vf){ // u ser location found in array @vh['me']['x'] = @vu[2]; @vh['me']['y'] = @vu[3]; } else { //ne xt card location found in array @vh['card']['x'] = @vu[2]; @vh['card']['y'] = @vu[3]; } } } } else { foreach(@vw as @vu){ if(@vu[0] == @vf || @vu[0] == @vg){ if(@vu[0] == @vf){ @vh['me']['x'] = @vu[2]; @vh['me']['y'] = @vu[3]; @vh['card']['x'] = @vu[2]; @vh['card']['y'] = @vu[3]; } } } } if(@vh['me']['x']-@vh['card']['x'] AND @vh['me']['y']-@vh['card']['y']){ @vh['distance'] = sqrt(pow(@vh['me']['x']-@vh['card']['x'],2)+pow(@vh['me']['y']-@vh['card']['y'],2)); @vh['deg'] = compas(@vh['me']['x']-@vh['card']['x'], @vh['me']['y']-@vh['card']['y']); } else{ @vh['distance'] = max(@vh['me']['x']-@vh['card']['x'], @vh['me']['y']-@vh['card']['y']); @vh['deg'] = compas(@vh['me']['x']-@vh['card']['x'], @vh['me']['y']-@vh['card']['y']); } return @vh; } //compass function was copied directly from php.net documentation function compas(@vx, @vy){ if(@vx==0 AND @vy==0){ return 0; } return (@vx < 0) ? rad2deg(atan2(@vx,@vy))+360 : rad2deg(atan2(@vx,@vy)); }[/code] find_degree was never optimized but it worked. For some reason 0 degrees came out as due south when I was expecting it to be east but that was an easy fix. Of course if you were using this in an item with a locate spell you would have to increase the locations array to cover all map locations. Edited October 4, 2010 by Laphers Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.