Board index Programs with AI or Rules Enforcement Magic: The Gathering - Duels of the Planeswalkers Programming Talk
Choose a Creature Type Function
Moderator: CCGHQ Admins
Choose a Creature Type Function
by Xander9009 » 17 Sep 2014, 16:37
Original post
Response section
This is a continuation of the discussion in the Formal Response Thread. Basically, Neo started developing a method of typing in a creature type so any type can be chosen. I decided to look into expanding upon that idea by allowing it to determine the number of possible types for the current string and operate based on the number of possibilities.
>5: Continue as normal
<=5: Show button for each type
The result is that for Juggernaught, the player can click "Next", "J", "Juggernaught" and be done rather than click "Next" until you find and click every letter, which would take 46 clicks as opposed to 3.
Neo's code can be found in the original post linked above. Mine is attached here, with a snippet below. However, I have some issues because I don't know much about Lua or Lua's interaction with DotP. Basically, if you look at the code, you can see that it's pretty simple. You call the function {GetStringPossibleTypes("SomeString")} and it returns the number of possibilities. That much is mostly done and should nearly work (there are no returns yet). The problem is obtaining the actual string results. There are 5 possible results, oResults1, oResults2, ...
How can I pass multiple return values? I was thinking of setting global variables, which would work just as well, but that would still require returning up to 6 variables to the calling function or card. The only potential solution I can think of would be to use data chests. Unfortunately, I don't know how to do that from Lua.
Response section
This is a continuation of the discussion in the Formal Response Thread. Basically, Neo started developing a method of typing in a creature type so any type can be chosen. I decided to look into expanding upon that idea by allowing it to determine the number of possible types for the current string and operate based on the number of possibilities.
>5: Continue as normal
<=5: Show button for each type
The result is that for Juggernaught, the player can click "Next", "J", "Juggernaught" and be done rather than click "Next" until you find and click every letter, which would take 46 clicks as opposed to 3.
Neo's code can be found in the original post linked above. Mine is attached here, with a snippet below. However, I have some issues because I don't know much about Lua or Lua's interaction with DotP. Basically, if you look at the code, you can see that it's pretty simple. You call the function {GetStringPossibleTypes("SomeString")} and it returns the number of possibilities. That much is mostly done and should nearly work (there are no returns yet). The problem is obtaining the actual string results. There are 5 possible results, oResults1, oResults2, ...
How can I pass multiple return values? I was thinking of setting global variables, which would work just as well, but that would still require returning up to 6 variables to the calling function or card. The only potential solution I can think of would be to use data chests. Unfortunately, I don't know how to do that from Lua.
- Code snippet: | Open
- Code: Select all
GetStringPossibleTypes = Function(oVal)
local oResults = 0
local oResult1 = ""
local oResult2 = ""
local oResult3 = ""
local oResult4 = ""
local oResult5 = ""
oLen = s:len(oVal)
If oLen = 1 then
oResults = GetStringPossibleTypes1(oVal)
ElseIf oLen = 2 then
oResults = GetStringPossibleTypes2(oVal)
ElseIf oLen = 3 then
oResults = GetStringPossibleTypes3(oVal)
ElseIf oLen = 4 then
oResults = GetStringPossibleTypes4(oVal)
ElseIf oLen = 5 then
oResults = GetStringPossibleTypes5(oVal)
ElseIf oLen = 6 then
oResults = GetStringPossibleTypes6(oVal)
ElseIf oLen = 7 then
oResults = GetStringPossibleTypes7(oVal)
ElseIf oLen = 8 then
oResults = GetStringPossibleTypes8(oVal)
ElseIf oLen = 9 then
oResults = GetStringPossibleTypes9(oVal)
ElseIf oLen = 10 then
oResults = GetStringPossibleTypes10(oVal)
ElseIf oLen = 11 then
oResults = GetStringPossibleTypes11(oVal)
ElseIf oLen = 12 then
oResults = GetStringPossibleTypes12(oVal)
ElseIf oLen = 13 then
oResults = GetStringPossibleTypes13(oVal)
ElseIf oLen = 14 then
oResults = GetStringPossibleTypes14(oVal)
ElseIf oLen = 15 then
oResults = GetStringPossibleTypes15(oVal)
ElseIf oLen = 16 then
oResults = GetStringPossibleTypes16(oVal)
ElseIf oLen = 17 then
oResults = GetStringPossibleTypes17(oVal)
ElseIf oLen = 18 then
oResults = GetStringPossibleTypes18(oVal)
ElseIf oLen = 19 then
oResults = GetStringPossibleTypes19(oVal)
ElseIf oLen = 20 then
oResults = GetStringPossibleTypes20(oVal)
Else
oResults = 0
End
End
GetStringPossibleTypes1 = function(oVal)
local oResults = 0
local oResult1 = ""
local oResult2 = ""
local oResult3 = ""
local oResult4 = ""
local oResult5 = ""
If oVal == "A" then
oResults - 65
ElseIf oVal == "B" then
oResults - 47
ElseIf oVal == "C" then
oResults - 83
ElseIf oVal == "D" then
oResults - 52
ElseIf oVal == "E" then
oResults - 51
ElseIf oVal == "F" then
oResults - 30
ElseIf oVal == "G" then
oResults - 46
ElseIf oVal == "H" then
oResults - 44
ElseIf oVal == "I" then
oResults - 20
ElseIf oVal == "J" then
oResults - 3
oResult1 = "JABALI"
oResult2 = "JELLYFISH"
oResult3 = "JUGGERNAUT"
ElseIf oVal == "K" then
oResults - 21
ElseIf oVal == "L" then
oResults - 30
ElseIf oVal == "M" then
oResults - 63
ElseIf oVal == "N" then
oResults - 23
ElseIf oVal == "O" then
oResults - 36
ElseIf oVal == "P" then
oResults - 55
ElseIf oVal == "Q" then
oResults - 3
oResult1 = "QUALLE"
oResult2 = "QUEEN"
oResult3 = "QUIMERA"
ElseIf oVal == "R" then
oResults - 31
ElseIf oVal == "S" then
oResults - 126
ElseIf oVal == "T" then
oResults - 32
ElseIf oVal == "U" then
oResults - 9
ElseIf oVal == "V" then
oResults - 19
ElseIf oVal == "W" then
oResults - 16
ElseIf oVal == "Y" then
oResults - 2
oResult1 = "YERBAMALA"
oResult2 = "YETI"
ElseIf oVal == "Z" then
oResults - 14
Else
oResults = 0
End
End
GetStringPossibleTypes2 = function(oVal)
local oResults = 0
local oResult1 = ""
local oResult2 = ""
local oResult3 = ""
local oResult4 = ""
local oResult5 = ""
ElseIf oVal == "AB" then
oResults - 1
oResult1 = "ABANDERADO"
ElseIf oVal == "AC" then
oResults - 1
oResult1 = "ACORAZADO"
ElseIf oVal == "AD" then
oResults - 4
oResult1 = "ADALID"
oResult2 = "ADDETTO AL MONTAGGIO"
oResult3 = "ADLER"
oResult4 = "ADVISOR"
ElseIf oVal == "AG" then
oResults - 1
oResult1 = "AGUILA"
ElseIf oVal == "AI" then
oResults - 1
oResult1 = "AIGLE"
ElseIf oVal == "AL" then
oResults - 7
...
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
Xander9009 - Programmer
- Posts: 2905
- Joined: 29 Jun 2013, 07:44
- Location: Indiana, United States
- Has thanked: 121 times
- Been thanked: 445 times
Re: Choose a Creature Type Function
by RiiakShiNal » 17 Sep 2014, 22:37
You can use a table. For example set the table up so that index 0 is the number of results and the next X indices are used for the results.
If you must persist the strings in a data chest then you should write some helper functions to do it because the basic concept is this:
To Store a String:
To retrieve it would be a similar process, but in reverse:
- Code: Select all
local oResultTable
oResultTable[0] = nResults
oResultTable[1] = oResults1
oResultTable[2] = oResults2
...
return oResultTable
If you must persist the strings in a data chest then you should write some helper functions to do it because the basic concept is this:
To Store a String:
- Get String to Store and the Chest register to store it in.
- Create a chest in that register. (This creates a sub-chest to store the string.)
- Start an index variable and initialize at 0.
- Loop through all letters in the string (I believe string indices start at 1 so it would be your index variable + 1).
- Extract the letter at index + 1.
- Convert the letter to a number.
- Store the number in register index.
- Increment index.
To retrieve it would be a similar process, but in reverse:
- Get chest and register to read from.
- Get the sub-chest in the register.
- Create an empty string to start with.
- Create an index variable and initialize at 0.
- While the number in register index does not equal 0.
- Read number from register index.
- Convert number to letter.
- Add the letter to the end of the string variable.
- Increment index.
- Return string variable.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2183
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 496 times
Re: Choose a Creature Type Function
by Xander9009 » 17 Sep 2014, 23:23
Like this (generally)?
- Code: Select all
--On the card
Local SomeVar
SomeVar = GetStringPossibleTypes(CurrentUserInput) --returns the result table from the code snippet you posted
If SomeVar[0] > 0 then
If SomeVar[0] < 6 then
FirstResult = SomeVar[1]
If SomeVar[0] > 1 then
SecondResult = SomeVar[2]
End
If SomeVar[0] > 2 then
SecondResult = SomeVar[3]
End
...
Else
-- Error - too many results
End
Else
--Error - no results at all
End
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
Xander9009 - Programmer
- Posts: 2905
- Joined: 29 Jun 2013, 07:44
- Location: Indiana, United States
- Has thanked: 121 times
- Been thanked: 445 times
Re: Choose a Creature Type Function
by RiiakShiNal » 18 Sep 2014, 00:49
That's about right, generally, though for index 3 you would probably want to assign to ThirdResult instead of SecondResult. Also you can combine a couple of lines like this:
Edit: It looks like at some point I created a couple of functions for storing/retrieving strings from a data chest. Though I don't know how well tested they are.
- Code: Select all
local SomeVar = GetStringPossibleTypes(CurrentUserInput)
- Code: Select all
if (SomeVar[0] > 0) and (SomeVar[0] < 6) then
Edit: It looks like at some point I created a couple of functions for storing/retrieving strings from a data chest. Though I don't know how well tested they are.
- String Functions | Open
- Code: Select all
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Riiak Shi Nal's Magic The Gathering - String Functions ----------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- /////////////////////////////////////////////////////////////////////////////
-- Public Functions ////////////////////////////////////////////////////////////
RSN_SetString = function( oDC, nIndex, sString )
-- We default to no success in case we encounter a problem (oDC is nil).
local bSuccess = false
if (oDC ~= nil) then
-- Make a sub-chest to store our string in.
local oStringChest = oDC:Make_Chest( nIndex )
-- Store our string length to make things somewhat easier later.
local nLen = sString:len()
oStringChest:Int_Set( 0, nLen )
-- We support storing 0 length strings, but you can't iterate
-- through a zero length string so we simply skip this part.
if (nLen > 0) then
-- Iterate through the length of the string writing each
-- character to the data chest.
local i
for i = 1, nLen do
oStringChest:Int_Set( i, sString:byte( i ) )
end
end
-- Set that we stored the string successfully.
bSuccess = true
end
-- Return whether we succeeded or not (should unless we were given a
-- bad data chest).
return bSuccess
end
RSN_GetString = function( oDC, nIndex )
-- Set our default return value in case of problems.
local sReturn = nil
if (oDC ~= nil) then
local oStringChest = oDC:Get_Chest( nIndex )
if (oStringChest ~= nil) then
-- Get our string length.
local nLen = oStringChest:Int_Get( 0 )
-- We got this far so we should go ahead and account
-- for storing of an empty string.
sReturn = ""
if (nLen > 0) then
-- We have more than one character so we need
-- to iterate through and restore the string.
local i
for i = 1, nLen do
sReturn = sReturn .. string.char( oStringChest:Int_Get( i ) )
end
end
end
end
-- Return the string we ended up with or the default if we encountered
-- a problem.
return sReturn
end
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2183
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 496 times
Re: Choose a Creature Type Function
by Xander9009 » 18 Sep 2014, 01:22
Alright, awesome. And I originally had those two lines together from your second example. I separated them to handle "no results" meaning stop and go back and "too many results" meaning it wasn't narrowed enough so keep going without having to query it three times.
As for the string functions, that's great! The coding Neo did used a repeating action. At a glance, I didn't pay attention to the fact that it would probably lose local variables across iterations. However, it appears there's already a working system for that issue. It appears to be doing exactly what you suggested, but I'll compare it to yours and see if I notice any important differences.
Thanks for the advice. I'll work on this tomorrow or sometime soon and post back any progress. The really difficult part is going to be incorporating this into his working code without messing it up. What I've already done is just some Excel&Notepad++ magic. Nothing requiring too much thought (well, a couple of the formulas in Excel were... complicated, but that's a complexity I'm well acquainted with haha).
As for the string functions, that's great! The coding Neo did used a repeating action. At a glance, I didn't pay attention to the fact that it would probably lose local variables across iterations. However, it appears there's already a working system for that issue. It appears to be doing exactly what you suggested, but I'll compare it to yours and see if I notice any important differences.
Thanks for the advice. I'll work on this tomorrow or sometime soon and post back any progress. The really difficult part is going to be incorporating this into his working code without messing it up. What I've already done is just some Excel&Notepad++ magic. Nothing requiring too much thought (well, a couple of the formulas in Excel were... complicated, but that's a complexity I'm well acquainted with haha).
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
Xander9009 - Programmer
- Posts: 2905
- Joined: 29 Jun 2013, 07:44
- Location: Indiana, United States
- Has thanked: 121 times
- Been thanked: 445 times
Re: Choose a Creature Type Function
by NeoAnderson » 26 Oct 2014, 01:31
Finally i coded what you asked to me, here there is a sample of the functions i used to do it.
Neo_TypeCreature() is the main function to iterate the typing.
....There some other functions but are too long to copy into a single post, anyway are just type lists functions nothing of special.
If you want to take a look to the complete list of function you can download the Convoke Pack - Ver 1.3
Neo_TypeCreature() is the main function to iterate the typing.
- Neo_TypeCreature | Open
- Code: Select all
Neo_TypeCreature = function(player)
local n = MTG():GetActionRepCount()
local oString = ""
local oEnding = "OK"
local oType = ""
local difference = 0
if n == 0 then
EffectDC():Set_Int(10, 1)
EffectDC():Set_Int(20, 0)
EffectDC():Set_Int(4445, 0)
end
local parity = n % 2
local startIndex = EffectDC():Get_Int(10)
local val = 0
for i=1, EffectDC():Get_Int(20) do
val = i + 20
oType = NumbersToString(EffectDC():Get_Int(val))
oString = oString..oType
end
if parity == 0 then
if oString ~= "" then
local Tchest = Neo_FindSubString(oString)
if Tchest ~= nil and Tchest ~= -1 then
player:BeginNewMultipleChoice()
local testindex = Tchest:Get_Int(0)
for k=1, testindex do
local TypetoDisplay = Tchest:Get_Int(k)
TypetoDisplay = TypetoDisplay - 1000
player:AddMultipleChoiceAnswer( "CARD_QUERY_CREATURE_TYPE_"..TypetoDisplay )
end
player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
EffectDC():Set_Int(4444, 1)
else
player:BeginNewMultipleChoice()
player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_PREV" )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+1 ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+2 ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+3 ) )
player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_NEXT" )
player:AddMultipleChoiceAnswer( oString.." - "..oEnding )
player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
end
else
player:BeginNewMultipleChoice()
player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_PREV" )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+1 ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+2 ) )
player:AddMultipleChoiceAnswer( NumbersToString( startIndex+3 ) )
player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_NEXT" )
player:AddMultipleChoiceAnswer( oString.." - "..oEnding )
player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
end
elseif parity == 1 then
local result = player:GetMultipleChoiceResult()
if EffectDC():Get_Int(4444) == 1 then
local Tchest = Neo_FindSubString(oString)
if Tchest ~= nil and Tchest ~= -1 then
local TypetoDisplay = Tchest:Get_Int(result+1)
EffectDC():Set_Int(4445, TypetoDisplay )
EffectDC():Set_Int(0,1)
return false
end
else
if result == 0 then
if startIndex == 1 then
startIndex = 25
else
startIndex = startIndex - 4
end
EffectDC():Set_Int(10, startIndex)
elseif result == 5 then
if startIndex == 25 then
startIndex = 1
else
startIndex = startIndex + 4
end
EffectDC():Set_Int(10, startIndex)
elseif result > 0 and result < 5 then
difference = result + (startIndex - 1)
EffectDC():Int_Inc(20)
local pos = EffectDC():Get_Int(20)
pos = pos + 20
EffectDC():Set_Int(pos, difference)
elseif result == 6 then
local oTypeToAdd = StringToCreatureIndex(oString)
if oTypeToAdd ~= 0 then
EffectDC():Set_Int(0,1)
return false
else
EffectDC():Set_Int(10, 1)
EffectDC():Set_Int(20, 0)
startIndex = 1
oString = ""
end
end
end
end
return true
end
- Neo_FindSubString | Open
- Code: Select all
Neo_FindSubString = function( oString )
local TypeChest = EffectDC():Make_Chest(100)
local lenght = string.len(oString)
TypeChest:Set_Int(0,0)
local index = TypeChest:Get_Int(0)
for i=1, 1083 do
local TempString = Neo_ReturnCreatureType(i)
local TempSubString = string.sub(TempString, 1, lenght)
if oString == TempSubString then
local NumericType = StringToCreatureIndex(TempString)
if NumericType > 999 then
local FindType = 0
for j=1, index do
local ActualChestType = TypeChest:Get_Int(j)
if ActualChestType == NumericType then
FindType = 1
end
end
if FindType == 0 then
TypeChest:Int_Inc(0)
index = TypeChest:Get_Int(0)
TypeChest:Set_Int(index, NumericType)
end
end
end
end
local testindex = TypeChest:Get_Int(0)
if testindex > 0 and testindex < 8 then
return TypeChest
end
return -1
end
- Neo_ChooseCreatureType | Open
- Code: Select all
Neo_ChooseCreatureType = function(player, TypeEffect)
local choose = -1
local Ctype = EffectDC():Make_Chest(NEO_COMPARTMENT_ID_CREATURE_TYPE)
if player:IsAI() then
if TypeEffect == 1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_HAND)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
end
end
end
return false
elseif TypeEffect == 2 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_HAND)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
end
end
end
return false
elseif TypeEffect == 3 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_EXILE)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
end
end
end
return false
elseif TypeEffect == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
if choose == -1 then
choose = Neo_RandomTypeChoose()
end
end
end
return false
elseif TypeEffect == -2 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_RandomTypeChoose()
end
end
end
return false
elseif TypeEffect == -3 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
if choose == -1 then
choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
if choose == -1 then
choose = Neo_RandomTypeChoose()
end
end
end
return false
end
else
if Neo_TypeCreature(player) == false then
if EffectDC():Get_Int(0) == 1 then
if EffectDC():Get_Int(4445) ~= 0 then
local oTypeToAdd = EffectDC():Get_Int(4445)
Ctype:Set_Int(NEO_CHOSEN_CREATURE_TYPE, oTypeToAdd)
return false
else
local oSString = ""
local oType = ""
local val = 0
for i=1, EffectDC():Get_Int(20) do
val = i + 20
oType = NumbersToString(EffectDC():Get_Int(val))
oSString = oSString..oType
end
local oTypeToAdd = StringToCreatureIndex(oSString)
if oTypeToAdd ~= 0 then
Ctype:Set_Int(NEO_CHOSEN_CREATURE_TYPE, oTypeToAdd)
end
return false
end
end
else
return true
end
end
end
- Neo_ChosenCType | Open
- Code: Select all
Neo_ChosenCType = function()
local Ctype = EffectDC():Get_Chest(NEO_COMPARTMENT_ID_CREATURE_TYPE)
local ChoosenType = 0
if Ctype ~= nil then
ChoosenType = Ctype:Get_Int(NEO_CHOSEN_CREATURE_TYPE)
end
return ChoosenType
end
....There some other functions but are too long to copy into a single post, anyway are just type lists functions nothing of special.
If you want to take a look to the complete list of function you can download the Convoke Pack - Ver 1.3
- NeoAnderson
- Posts: 914
- Joined: 10 Sep 2013, 07:49
- Has thanked: 18 times
- Been thanked: 139 times
Re: Choose a Creature Type Function
by Xander9009 » 28 Oct 2014, 12:46
Alright, just got around to testing them. I haven't looked at the functions themselves, but yes, this is exactly what I was hoping for! Thopter, for instance, would take 6 letters (a total of 24 buttons). This way it only takes 10. It might not be a huge boost, but it cuts it in half. And of course, longer ones like saproling, dreadnaught, or assembly-worker (which, by the way, is missing) are reduced SO much. Thank you for taking the time to do this. It's perfect
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
-
Xander9009 - Programmer
- Posts: 2905
- Joined: 29 Jun 2013, 07:44
- Location: Indiana, United States
- Has thanked: 121 times
- Been thanked: 445 times
Re: Choose a Creature Type Function
by NeoAnderson » 28 Oct 2014, 12:52
I am glad you like it, your suggestions always inspire me.Xander9009 wrote:Alright, just got around to testing them. I haven't looked at the functions themselves, but yes, this is exactly what I was hoping for! Thopter, for instance, would take 6 letters (a total of 24 buttons). This way it only takes 10. It might not be a huge boost, but it cuts it in half. And of course, longer ones like saproling, dreadnaught, or assembly-worker (which, by the way, is missing) are reduced SO much. Thank you for taking the time to do this. It's perfect
- NeoAnderson
- Posts: 914
- Joined: 10 Sep 2013, 07:49
- Has thanked: 18 times
- Been thanked: 139 times
8 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 9 guests