Heavy-Gear
New Member
- Reaction score
- 7
For my game Island of Souls I've been working on the itemcrafting trigger. There are no syntax errors etc. but at the moment, regardless of whether you have the correct components, "ERROR: Missing Requirements!" Is displayed whenever you try to make something.
Any help appreciated
JASS:
scope CraftTrigger
//==========================================================================
globals
// Toolcraft Abilities
private constant integer SID_BUILDARROW = 039;A00E039;
private constant integer SID_BUILDAWARD = 039;A00J039;
private constant integer SID_BUILDFIREKIT = 039;A005039;
private constant integer SID_BUILDFBLADE = 039;A00F039;
private constant integer SID_BUILDHSTONE = 039;A00K039;
private constant integer SID_BUILDKNIFE = 039;A00G039;
private constant integer SID_BUILDSWARD = 039;A00H039;
private constant integer SID_BUILDSHARPSTONE = 039;A007039;
private constant integer SID_BUILDSFBLADE = 039;A00I039;
// Toolcraft Items
private constant integer IID_ARROW = 039;I00D039;
private constant integer IID_AWARD = 039;I00E039;
private constant integer IID_FIREKIT = 039;I00A039;
private constant integer IID_FBLADE = 039;I007039;
private constant integer IID_HSTONE = 039;I005039;
private constant integer IID_KNIFE = 039;I006039;
private constant integer IID_SWARD = 039;I00C039;
private constant integer IID_SHARPSTONE = 039;I009039;
private constant integer IID_SFBLADE = 039;I008039;
endglobals
//==========================================================================
private function Actions takes nothing returns nothing
local integer array RawItem
local integer array RawItemIID
local integer array RawItemNeeded
local unit C = GetSpellAbilityUnit()
local integer I
local integer c = 0
local integer t = 0
local integer i = 0
local integer j = 0
local integer stones = 0
local integer vines = 0
local integer flint = 0
local integer largebones = 0
local integer shells = 0
local integer smallbones = 0
local integer soulstones = 0
local integer sticks = 0
local integer flintblades = 0
local integer strongflintblades = 0
local integer merrentill = 0
local integer sungrass = 0
local integer gnollsleaf = 0
local integer avantoe = 0
local integer gnomeswood = 0
local integer knifereq = 0
local integer hammerreq = 0
if GetSpellAbilityId() == SID_BUILDARROW then
set sticks = 1
set shells = 1
set knifereq = 1
set I = IID_ARROW
set t = 3
endif
if GetSpellAbilityId() == SID_BUILDAWARD then
set sticks = 1
set stones = 1
set vines = 1
set flint = 1
set soulstones = 1
set knifereq = 1
set I = IID_AWARD
set t = 6
endif
if GetSpellAbilityId() == SID_BUILDFIREKIT then
set sticks = 1
set stones = 2
set knifereq = 1
set I = IID_FIREKIT
set t = 4
endif
if GetSpellAbilityId() == SID_BUILDFBLADE then
set flint = 1
set hammerreq = 1
set I = IID_FBLADE
set t = 2
endif
if GetSpellAbilityId() == SID_BUILDHSTONE then
set stones = 2
set I = IID_HSTONE
set t = 2
endif
if GetSpellAbilityId() == SID_BUILDKNIFE then
set flintblades = 1
set vines = 1
set I = IID_KNIFE
set t = 2
endif
if GetSpellAbilityId() == SID_BUILDSWARD then
set sticks = 1
set stones = 1
set vines = 1
set flint = 1
set soulstones = 1
set knifereq = 1
set I = IID_SWARD
set t = 6
endif
if GetSpellAbilityId() == SID_BUILDSHARPSTONE then
set stones = 1
set knifereq = 1
set I = IID_SHARPSTONE
set t = 2
endif
if GetSpellAbilityId() == SID_BUILDSFBLADE then
set flint = 1
set hammerreq = 1
set I = IID_SFBLADE
set t = 2
endif
set RawItemIID[0] = 039;I002039; //Stone
set RawItemIID[1] = 039;I000039; //Vine
set RawItemIID[2] = 039;I00B039; //Flint
set RawItemIID[3] = 039;I00G039; //LargeBone
set RawItemIID[4] = 039;I003039; //Shell
set RawItemIID[5] = 039;I00F039; //SmallBone
set RawItemIID[6] = 039;I004039; //SoulStone
set RawItemIID[7] = 039;I001039; //Stick
set RawItemIID[8] = 039;I007039; //FlintBlade
set RawItemIID[9] = 039;I008039; //StrongFlintBlade
set RawItemIID[10] = 039;I00J039; //Merrentill
set RawItemIID[11] = 039;I00K039; //Sungrass
set RawItemIID[12] = 039;I00L039; //Gnollsleaf
set RawItemIID[13] = 039;I00M039; //Avantoe
set RawItemIID[14] = 039;I00N039; //Gnomeswood
set RawItemIID[15] = 039;I006039; //Knife
set RawItemIID[16] = 039;I005039; //Hammerstone
set RawItemNeeded[0] = stones
set RawItemNeeded[1] = vines
set RawItemNeeded[2] = flint
set RawItemNeeded[3] = largebones
set RawItemNeeded[4] = shells
set RawItemNeeded[5] = smallbones
set RawItemNeeded[6] = soulstones
set RawItemNeeded[7] = sticks
set RawItemNeeded[8] = flintblades
set RawItemNeeded[9] = strongflintblades
set RawItemNeeded[10] = merrentill
set RawItemNeeded[11] = sungrass
set RawItemNeeded[12] = gnollsleaf
set RawItemNeeded[13] = avantoe
set RawItemNeeded[14] = gnomeswood
set RawItemNeeded[15] = knifereq
set RawItemNeeded[16] = hammerreq
loop
exitwhen i >= 5 //loops inventory slots
loop
exitwhen j >= 16 //loops all raw item types
if GetItemTypeId(UnitItemInSlot(C, i)) == RawItemIID[j] then
set RawItem[j] = RawItem[j] + 1
endif
if RawItem[j] == RawItemNeeded[j] and RawItemNeeded[j] != 0 then //checks if there is enough of that item
set c = c + 1
endif
set j = j + 1
endloop
set i = i + 1
endloop
set i = 0
set j = 0
if c == t then
loop
exitwhen i >= 14 //note: this loop only removes up to knife/hammerstone and not including
loop
exitwhen j >= RawItemNeeded<i>
call UnitRemoveItem(C, GetItemOfTypeFromUnitBJ(C, RawItem<i>))
set j = j + 1
endloop
set i = i + 1
endloop
call UnitAddItem(C, CreateItem(I, GetUnitX(C), GetUnitY(C)))
else
call DisplayTimedTextToPlayer(GetOwningPlayer(C), 0, 0, 10, "ERROR: Missing requirements!")
endif
endfunction
//==========================================================================
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SID_BUILDARROW or GetSpellAbilityId() == SID_BUILDAWARD or GetSpellAbilityId() == SID_BUILDFIREKIT or GetSpellAbilityId() == SID_BUILDFBLADE or GetSpellAbilityId() == SID_BUILDHSTONE or GetSpellAbilityId() == SID_BUILDKNIFE or GetSpellAbilityId() == SID_BUILDSWARD or GetSpellAbilityId() == SID_BUILDSHARPSTONE or GetSpellAbilityId() == SID_BUILDSFBLADE
endfunction
public function InitTrig takes nothing returns nothing
local trigger trigg = CreateTrigger()
local integer i = 0
loop
exitwhen i >= 11
call TriggerRegisterPlayerUnitEvent(trigg, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set i = i + 1
endloop
call TriggerAddCondition(trigg, Condition(function Conditions ) )
call TriggerAddAction(trigg, function Actions )
endfunction
//==========================================================================
endscope</i></i>
Any help appreciated