Difference between pages "Template:FunctionPage" and "Adventure"

From Kolmafia
(Difference between pages)
Jump to navigation Jump to search
imported>StDoodle
m
 
imported>Bale
(interesting example)
 
Line 1: Line 1:
<includeonly>{| align="right"
+
{{
  | __TOC__
+
#vardefine:name|adventure}}{{
  |}{{#customtitle:{{{name}}}()|{{{name}}}()}}<br clear="none" />{{#if: {{{needscode|}}}|{{CodeRequest}}}}{{#if: {{{improvecode|}}}|{{CodeRequest|better=yes}}}}<h2>Function Syntax</h2>{{#if: {{{function1|}}}|{{{function1}}}}}{{#if: {{{function2|}}}|{{{function2}}}}}{{#if: {{{function3|}}}|{{{function3}}}}}{{#if: {{{function4|}}}|{{{function4}}}}}{{#if: {{{function5|}}}|{{{function5}}}}}
+
#vardefine:return_type|boolean}}{{
{{#if: {{{function_description|}}}|<p>{{{function_description}}}</p>}}
 
{{#if: {{{code1|}}}|{{{code1}}}}}{{#if: {{{code2|}}}|{{{code2}}}}}{{#if: {{{code3|}}}|{{{code3}}}}}{{#if: {{{code5|}}}|{{{code4}}}}}{{#if: {{{code5|}}}|{{{code5}}}}}{{#if: {{{cli_equiv|}}}|<h2>CLI Equivalent</h2><p>{{{cli_equiv}}}</p>}}{{#if: {{{see_also|}}}|{{{see_also|}}}}}{{#if: {{{more_info|}}}|<h2>More Information</h2><p>{{{more_info}}}</p>}}{{#if: {{{special|}}}|<h2>Special</h2><p>{{{special}}}</p>}}
 
[[Category:Ash Functions]]
 
{{#if: {{{function_category|}}}|[[Category:{{{function_category}}}]]}}{{#if: {{{second_category|}}}|[[Category:{{{second_category}}}]]}}{{#if: {{{third_category|}}}|[[Category:{{{third_category}}}]]}}
 
</includeonly>
 
<noinclude>
 
{| align="right"
 
  | __TOC__
 
  |}
 
<p>This is template for a function page (for just a function line, see "[[Template:Function]]").</p>
 
<h2>General Notes</h2>
 
<p>Any parameter line that is not used on a page should be deleted entirely. Do not leave a line with nothing after the equals sign, or with the CAPS helpful information.</p>
 
<p>Make sure all pipes -&gt; <nowiki>|</nowiki> &lt;- are used properly. They must always exist between each parameter in a template call.</p>
 
<p>There should not be a space between a parameter value and the pipe; doing so sometimes causes formatting problems.</p>
 
<p>For all numbered duplicates (functions, parameters, code), make sure they are used in order. Don't delete code1, and then use code3 and code5, for example.</p>
 
<h2>Setting Defaults</h2>
 
<p>"name," "aggregate," "return_type" and "return_also" are all set via a special template for defining variables. This allows them to be re-used in following function calls, without having to be re-typed.</p>
 
*"name" is set to the function's name, without any parenthesis (which are all added as appropriate by the templates).
 
*"aggregate" is set to any string if the default return value of the function is an [[Aggregate]] (map). Delete this line if this is not the case. This can be overridden on a function-call by function-call basis, so if most versions of the function return an aggregate, it would help to set this variable. (But in that case, make sure to delete the line for "aggregate=" in each function call that doesn't return an aggregate.)
 
*"return_type" is set to the default datatype returned by the function. If a "simple" datatype, such as string, int, $item, etc., enter only that word. If the function returns an aggregate, use the whole aggregate definition.
 
*"return_also" is used for functions that return multiple data types. For example, some functions can return both [[string]] and [[buffer]]. In such a case, set "return_type" to one of them, and "return_also" to the other.
 
<h2>Editing Function Information</h2>
 
<p>Please be sure to set "function_category" to an existing category. You may also use "second_category" and "third_category" if a function can fall under multiple categories. To request a new category, please post the request, a list of functions you feel should be in the category, and your reasoning on the Main Discussion page.</p>
 
<p>The function page accepts up to 5 different versions of the function itself. Each needs to be assigned to a parameter with names of "parameter1" through "parameter5." Use them in numerical order; don't skip around.</p>
 
<p>To edit each function version, edit all parameters for the call to [[Template:FunctionPage]] as needed.</p>
 
*In most cases, "name," "aggregate," "return_type" and "return_also" should be the same as the defaults for the page, and these lines can be left with their calls to "#var" as they are. This even applies to "aggregate" and "return_also" when you don't want to use said parameters; if the defaults have been omitted above, you can leave these lines in the individual function calls or delete them as desired.
 
*"parameter1" through "parameter5" are set to the functions parameters via a call to [[Template:Param]]. Use each in order, and don't skip around. For more info, see the template page.
 
*"p1desc" through "p2desc" are shown as a list below the function call line. See [[Template:Function]] for more info on their use. Note that in most cases of multiple function calls, some parameters are optional, but each usually builds on the next, reusing previous parameters. If this is the case, it's recommended that you only provide descriptions in the last function call and be sure to note when one is optional.
 
<p>After all of the information for the (maximum 5) function calls is the parameter function_description. This is used for the overall description of the function's purpose. Generally, it should say what is returned.</p>
 
<p>Specifying the data type for "function_description" is redundant, as it is already given on the function call line. A good example for function_description is "Returns the name of the logged-in character, all in lowercase." Try to avoid "Returns the name of the logged-in character as a string." </p>
 
<p>If multiple paragraphs are warranted for function_description, place paragraph end & start tags between them (ie "<nowiki>End of first paragraph.</p><p></nowiki>Start of second..."). Don't use markup at the beginning and end of the description; the template adds it automatically. Similarly, you can place lists & links inside the function_description using wiki standard markup.</p>
 
<h2>Code Samples</h2>
 
<p>Each code sample (assigned to parameters code1 through code5) can include a title, description, and the code itself.</p>
 
<p>The title will be displayed as a class-2 heading. In most cases, using the title for the first sample only will suffice (in which case it should be set to "Code Sample" or "Code Samples").</p>
 
<p>Normally, you will want a description for each code sample. As with function_description, if you need to have multiple paragraphs, add html markup between them (but not at the start and end).</p>
 
<p>The code parameter is very picky. Do NOT try to edit any part of this parameter other than typing the code where you see "CODE GOES HERE". Remember to use spaces for indenting (I'm trying to standardize on three spaces per indent on this wiki). Note that nothing inside the actual code area will expand as wiki text; don't use html tags, wiki markup, etc.; they won't be parsed.</p>
 
<h2>Multiple Functions & Code Samples</h2>
 
<p>For clarity, each function & code assignment should have a blank line between them. These will be ignored when the page is parsed.</p>
 
<p>To have an additional function call or code sample, simple copy and paste the entire block, increment the number on the assignment (ie change "function1=..." to "function2=...") and make and modifications required.</p>
 
<h2>Miscellaneous</h2>
 
<p>The see_also parameter takes a template, and will parse up to 16 functions as links in a special <nowiki><div></nowiki>.  Note that the functions should be passed by their wiki page name (the SeeAlso template will add parentheses). For more info, see [[Template:SeeAlso]].</p>
 
<p>The cli_equiv parameter is for noting a CLI equivalent to the function. Set this to the line of text (or lines, with inner tags as mentioned prevsiously) to describe the command. Wiki and html markup may be used (for example, to link to a page with more information).</p>
 
<p>The more_info parameter is used to describe and link to an external page (usually, a thread on the kolmafia.us forums) with more information on using the function. In general, this parameter should be avoided, and all applicable information should be included on the page. As with cli_equiv, this parameter can be a single or multiple lines, with html and wiki markup as needed.</p>
 
<p>The special parameter is used for any footnote information to add about the function. Useful for adding a line regarding the default return value for non-logged-in characters for functions where such information would differ, for example.</p>
 
<h2>Sample Call to Function Page</h2>
 
<p>The following is the basic call to this template. Note that the assignment under "function1" & under "code1" can each be repeated up to 5 times, total. Don't forget to delete unnecessary lines!</p>
 
<pre>
 
{{#vardefine:name|FUNCTION_NAME}}
 
{{#vardefine:return_type|DATATYPE}}
 
{{#vardefine:aggregate|ANYTHING_IF_AGG_OR_DELETE}}
 
{{#vardefine:return_also|SECONDARY_DATATYPE_OR_DELETE}}
 
  
{{FunctionPage|
+
FunctionPage|
 
name={{#var:name}}|
 
name={{#var:name}}|
function_category=CATEGORY|
+
function_category=Adventuring|
  
 
function1={{Function|
 
function1={{Function|
Line 63: Line 12:
 
return_type={{#var:return_type}}|
 
return_type={{#var:return_type}}|
 
return_also={{#var:return_also}}|
 
return_also={{#var:return_also}}|
parameter1={{Param|DATATYPE|SHORT_DESC}}|
+
parameter1={{Param|int|adventures}}|
parameter2={{Param|DATATYPE|SHORT_DESC}}|
+
parameter2={{Param|location|place}}|
parameter3={{Param|DATATYPE|SHORT_DESC}}|
 
parameter4={{Param|DATATYPE|SHORT_DESC}}|
 
parameter5={{Param|DATATYPE|SHORT_DESC}}|
 
p1desc=LONG_DESCRIPTION_OF_PARAMETER|
 
p2desc=LONG_DESCRIPTION_OF_PARAMETER|
 
p3desc=LONG_DESCRIPTION_OF_PARAMETER|
 
p4desc=LONG_DESCRIPTION_OF_PARAMETER|
 
p5desc=LONG_DESCRIPTION_OF_PARAMETER
 
 
}}|
 
}}|
  
function_description=DESCRIPTION_OF_FUNCTION|
+
function2={{Function|
 +
name={{#var:name}}|
 +
aggregate={{#var:aggregate}}|
 +
return_type={{#var:return_type}}|
 +
return_also={{#var:return_also}}|
 +
parameter1={{Param|int|adventures}}|
 +
parameter2={{Param|location|place}}|
 +
parameter3={{Param|string|filter}}|
 +
p1desc={{Pspan|int}} is the number of adventures to spend.|
 +
p2desc={{Pspan|place}} is the adventuring location.|
 +
p3desc={{Pspan|filter}} is the combat action filter. This is the name of a function which modifies the current CCS. The combat filter takes the parameters of a consult script, but returns lines like a CCS, not like a consult script. Essentially this allows the scripter to put a CCS into a script.|
 +
}}|
 +
 
 +
function_description=This function runs the specified number of {{pspan|adventures}} at the given {{pspan|place}}, keeping up your current mood & obeying restore settings.</p>
 +
<p>If {{Pspan|filter}} is omitted or assigned an empty string, this function will use your current CCS / battle action.</p>
 +
<p>This function does not have to make use of its return value, but if you wish to do so, it will return true if all adventures were used, and false if it is unable to do so for any reason (not enough adventures, location unavailable, etc.).</p>
 +
<p>Note that {{Pspan|adventures}} is the number of adventures to spend, and any "free" turns will not count towards this total.</p>
 +
<p>Note also that adventure() checks against goals set via [[add_item_condition|add_item_condition()]] or via other methods of specifying goals in KoLmafia.|
  
 
code1={{CodeSample|
 
code1={{CodeSample|
title=CODE EXAMPLE TITLE|
+
title=Code Sample|
description=DESCRIPTION OF CODE|
+
description=Adventure 5 times at the Giant's Castle:|
 +
code=
 +
<syntaxhighlight>
 +
adventure(5 , $location[giant's castle]);
 +
</syntaxhighlight>}}|
 +
 
 +
code2={{CodeSample|
 +
title=Example of a Combat Filter|
 +
description=This uses the combat filter to automatically olfact Goth Giants while adventuring.|
 
code=
 
code=
 
<syntaxhighlight>
 
<syntaxhighlight>
CODE GOES HERE
+
 
 +
string olfact_goth(int round, string opp, string text) {
 +
  if(opp != "Goth Giant")
 +
      return get_ccs_action(round);
 +
  if(round == 1 && have_effect($effect[On the Trail]) < 1)
 +
      return "skill transcendent olfaction"
 +
  else
 +
      return get_ccs_action(round - 1);
 +
}
 +
 
 +
adventure(5 , $location[giant castle], "olfact_goth");
 +
</syntaxhighlight>
 +
}}|
 +
 
 +
code3={{CodeSample|
 +
description=Uses a combat filter to ensure that all sewer monsters are being cleeshed while you try to make your way to Hobopolis.|
 +
code=
 +
<syntaxhighlight>
 +
string combat_cleesh(int round, string opp, string text) {
 +
  if (opp == $monster[frog].to_string() || opp == $monster[newt].to_string()
 +
    || opp == $monster[salamander].to_string()) {
 +
      return "attack";
 +
  }
 +
  return "skill CLEESH";
 +
}
 +
 
 +
adventure(1, $location[a maze of sewer tunnels], "combat_cleesh");
 +
</syntaxhighlight>
 +
}}|
 +
 
 +
code4={{CodeSample|
 +
description=This makes use of the combat filter to ensure that salve is being used.|
 +
code=
 +
<syntaxhighlight>
 +
// Adds salve to beginning of combat if it doesn't already exist in the CCS.
 +
// Otherwise it simply returns the current CCS.
 +
string insert_salve(int round, string opp, string text) {
 +
  boolean salve = false;
 +
  for i from 1 to 30
 +
      if(get_ccs_action(round) == "skill saucy salve")
 +
        salve = true;
 +
  if(salve)
 +
      return get_ccs_action(round);
 +
  else {
 +
      if(round == 1)
 +
        return "skill saucy salve";
 +
      if(round > 1)
 +
        round = round - 1;              // compensate for insertion
 +
      return get_ccs_action(round);      // for the rest of the combat, executes your existing ccs
 +
  }
 +
}
 +
 
 +
adventure(5 , $location[giant castle], "insert_salve");
 
</syntaxhighlight>
 
</syntaxhighlight>
 
}}|
 
}}|
  
see_also={{SeeAlso|FIRST|SECOND|ETC}}|
+
see_also={{SeeAlso|adv1}}|
cli_equiv=LIST_CLI_EQUIVALENT_INFO|
+
cli_equiv=The CLI command "adv" works similarly.|
more_info=A_LINE_TO_NOTIFY_OF_EXTERNAL_INFO|
+
special=This function will return false if KoLmafia conditions are met before completing the specified number of turns.
special=SPECIAL_NOTES_SUCH_AS_NOT-LOGGED-IN_VALUE
 
 
}}
 
}}
</pre>
 
[[Category:Basic Templates]]
 
</noinclude>
 

Revision as of 23:27, 15 March 2010

Function Syntax

boolean adventure(int adventures ,location place )

boolean adventure(int adventures ,location place ,string filter )

  • int is the number of adventures to spend.
  • place is the adventuring location.
  • filter is the combat action filter. This is the name of a function which modifies the current CCS. The combat filter takes the parameters of a consult script, but returns lines like a CCS, not like a consult script. Essentially this allows the scripter to put a CCS into a script.

This function runs the specified number of adventures at the given place, keeping up your current mood & obeying restore settings.

If filter is omitted or assigned an empty string, this function will use your current CCS / battle action.

This function does not have to make use of its return value, but if you wish to do so, it will return true if all adventures were used, and false if it is unable to do so for any reason (not enough adventures, location unavailable, etc.).

Note that adventures is the number of adventures to spend, and any "free" turns will not count towards this total.

Note also that adventure() checks against goals set via add_item_condition() or via other methods of specifying goals in KoLmafia.

Code Sample

Adventure 5 times at the Giant's Castle:

adventure(5 , $location[giant's castle]);

Example of a Combat Filter

This uses the combat filter to automatically olfact Goth Giants while adventuring.

string olfact_goth(int round, string opp, string text) {
   if(opp != "Goth Giant")
      return get_ccs_action(round);
   if(round == 1 && have_effect($effect[On the Trail]) < 1)
      return "skill transcendent olfaction"
   else
      return get_ccs_action(round - 1);
}

adventure(5 , $location[giant castle], "olfact_goth");

Uses a combat filter to ensure that all sewer monsters are being cleeshed while you try to make your way to Hobopolis.

string combat_cleesh(int round, string opp, string text) {
   if (opp == $monster[frog].to_string() || opp == $monster[newt].to_string() 
    || opp == $monster[salamander].to_string()) {
      return "attack";
   }
   return "skill CLEESH";
}

adventure(1, $location[a maze of sewer tunnels], "combat_cleesh");

This makes use of the combat filter to ensure that salve is being used.

// Adds salve to beginning of combat if it doesn't already exist in the CCS. 
// Otherwise it simply returns the current CCS.
string insert_salve(int round, string opp, string text) {
   boolean salve = false;
   for i from 1 to 30
      if(get_ccs_action(round) == "skill saucy salve")
         salve = true;
   if(salve)
      return get_ccs_action(round);
   else {
      if(round == 1)
         return "skill saucy salve";
      if(round > 1)
         round = round - 1;              // compensate for insertion
      return get_ccs_action(round);      // for the rest of the combat, executes your existing ccs
   }
}

adventure(5 , $location[giant castle], "insert_salve");

CLI Equivalent

The CLI command "adv" works similarly.

See Also

adv1()

Special

This function will return false if KoLmafia conditions are met before completing the specified number of turns.