ArcEmu: [lua] How To Use Lcfs Functions. - ArcEmu

Jump to content

Toggle shoutbox Lastest Announcements

dfighter  : (07 December 2014 - 12:06 PM) Arcemu is in hibernation mode, please read http://arcemu.org/fo...showtopic=26903
dfighter  : (01 January 2013 - 05:56 PM) Arcemu wishes you all a happy new year!
Hasbro  : (12 September 2012 - 10:01 AM) Please excuse our outage from the web! Our web host had a major malfunction!
dfighter  : (01 September 2012 - 04:05 PM) Since the spam bots just don't want to stop, I've enabled admin verification when registering.
dfighter  : (23 January 2012 - 09:56 PM) Please note that from now on you will need to confirm your email on the wiki in order to edit it!
Hasbro  : (31 December 2011 - 12:50 PM) Happy New Years all!
Navid  : (26 December 2011 - 04:09 AM) Merry Christmas !!!!!! Happy holidays all :)
WAmadeus  : (24 December 2011 - 03:54 PM) Merry Christmas to all!
dfighter  : (24 December 2011 - 11:05 AM) The Arcemu team wishes y'all a Merry Christmukkah!
Hasbro  : (05 October 2011 - 12:53 PM) Looking for web designers for upcoming web related project. If you're interested in designing user interfaces contact me
dfighter  : (02 September 2011 - 03:47 PM) So who here wants vehicles in Arcemu? :P http://arcemu.org/fo...showtopic=25440
Hasbro  : (14 August 2011 - 03:25 PM) Join us on irc, grab an irc client and connect to irc.freenode.net join channel #arcemu /server irc.freenode.net:6667 /join #arcemu
jackpoz  : (03 August 2011 - 05:33 AM) to all Lua Engine (old one) users: please check http://arcemu.org/fo...showtopic=25274
Hasbro  : (20 May 2011 - 05:27 PM) Looking for people experienced with CMake configuration and setup! Contact me asap
Hasbro  : (15 May 2011 - 05:03 PM) ArcEmu is recruiting C++ programmers, contact Hasbro if interested.
paroxysm  : (03 May 2011 - 06:26 PM) Updated luabridge gossip example to describe the whole gossip creation process rather than just how to create menu. Gossip tutorial
paroxysm  : (23 April 2011 - 11:35 AM) Lua writers can refer to the Luabridge Tutorials section in the Wiki to learn how to write gossip code correctly.
Hasbro  : (20 April 2011 - 05:22 PM) Thank you for your continuous contribution of bug reports, we are working on them.
Hasbro  : (17 April 2011 - 03:20 AM) Please consider donating to support our bills. Donations can be sent using PayPal to donations@arcemu.org - Thank you for your support.
paroxysm  : (10 April 2011 - 12:43 AM) Refer to the Luabridge Tutorials section in the Wiki to learn the new syntax of luabridge.
Resize Shouts Area

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[lua] How To Use Lcfs Functions. LCF for Dummies

#1 User is offline   paroxysm 

  • Chatty Cathy
  • Group: Retired
  • Posts: 320
  • Joined: 25-June 08
  • Gender:Male
  • Server OS:Windows

Posted 26 February 2010 - 09:40 PM

Recently, there was a few files committed to the lua misc folder entitled LCF. LCF simpy stands for Luas convinient functions, just means that most of the functions are wrappers so scripters can write shorter code.
Now, they break down to 3 object types: creature,player,gameobject. Depending on which object your dealing with, you will only be able to invoke the methods contained in that object's method table. For example :
//Simply an example to show how each function is encapsulated the object type.
//So in a random hooked server hook, we get a player object.
function OnZone(event,player,zone_id)
player:GetStrength() // Valid since GetStrength() is listed in LCF_Player
player:MonsterSay("Hello") //Trying to invoke methods listed in the creature or gameobject LCF files from a player object, results in a function not found error.
//However you can now do
local pet = player:SpawnLocalCreature(random_id,player:GetFaction(),0)
pet:MonsterSay("Hello master "..player:GetName()) // Since pet is a creature object, it has access to creature methods but not methods of the other 2 objects.
pet:SpawnLocalCreature(pet:GetEntry(),pet:GetFaction(),0) // pet can do this because SpawnLocalCreature is listed under LCF_Creature.
end

Now each object type comes with a RegisterLuaEvent(function,delay,repeats,...) function that will add an event with its event type being the object. They also come with RemoveLuaEvent(func) which will remove all events with this object as their event type. NOTE: If you specify func, it removes all events that call func.
Example.
MYBOSS_AI = { test_variable = "Encapsulated Variable" }
function MYBOSS_AI:MyBossOnCombat(unit)
unit:RegisterLuaEvent(self.AIUpdate_NoSelf,1000,0,unit) // replicated a similar effect to RegisterAIUpdateScript, NOTE: you can pass in extra arguments after the 3 formal arguments to have them passed to target function.
unit:RegisterLuaEvent(LCF:BindMethod(self.AIUpdate_Self,self),1000,0,unit) // same effect but whenever AIUpdate_self is called, it will pass in a value for the implied self variable. NOTE: If you plan to register a method, then you must call LCF:BindMethod(method,methods_table) for the 1st parameter to RegisterLuaEvent.
end
function MYBOSS_AI:AIUpdate_Self(unit)
print(self.test_variable) // this prints "Encapsulated Variable"
unit:RemoveLuaEvent(self.AIUpdate_Self) // Unregisters this function from being called
end
function MYBOSS_AI.AIUpdate_NoSelf(unit)
print(MYBOSS_AI.test_variable) // You can instantly note the advantage of using the self variable style. You don't have to type the whole table's name to retrieve it's contents, also using self appears more object oriented.
unit:RemoveLuaEvent(MYBOSS_AI.AIUpdate_NoSelf)
end

--LCF's extra functions
LCF comes with extra function which are not tied to any object and can be used publicly w/o having an object type. They are all listed in LCF_Extra
Example on how to use LCF.RegisterZoneHook(...)
Ok so we all know sometimes we want to register a zone hook, but to also get the proper zone, we have to check the passed in zone id to make sure it's the one we want. However, using RegisterZoneHook(zone_id,func), we can simply pass in the zone id we want and the function to be called when a player hits that zone id.
local ZONE_HOOKS = {}
function ZONE_HOOKS.OnZoneHook_noself(evt,player,zone_id)
//execute prefered code here
//We can remove this zone hook by:
LCF:RemoveZoneHook(zone_id,ZONE_HOOKS.OnZoneHook_noself)
//NOTE: LCF:RemoveZoneHook(zone_id) removes all events associated with that zone_id, specifying a function removes only events that call that function
end
function ZONE_HOOKS:OnZoneHook_self(evt,player,zone_id)
//execute prefered code here
// Now to remove
LCF:RemoveZoneHook(zone_id,self.OnZoneHook_self)
end
//Now we register both the function and the method.
LCF:RegisterZoneHook(valid_zoneid,ZONE_HOOKS.OnZoneHook_noself)
LCF:RegisterZoneHook(valid_zoneid,LCF.BindMethod(ZONE_HOOKS.OnZoneHook_self,ZONE_HOOKS))

RegisterAreaTrigger(...) also works the same except it's for area triggers

LCF:RegisterLuaEvent(evt_type,func,delay,repeats,...) works similar to the other types except this one takes an event type. Actually, all the other types simply call this function with the underlying object as the event type.


Well that concludes the LCF for Dummies documentation

This post has been edited by paroxysm: 27 February 2010 - 05:15 PM
Reason for edit: typo

1

#2 User is offline   HalestormXV 

  • The Ultimatum
  • PipPipPipPipPipPip
  • Group: Members
  • Posts: 1,031
  • Joined: 07-June 08
  • Gender:Male

Posted 27 February 2010 - 01:38 PM

In all honesty i just discovered the Lcfs yesterday while browsing through the check out of ArcScripts. I have to say these functions are amazing. I am curious, have you seen the LSL library? Maybe you want to also work on implementing that? And by implement i mean fix up and add into HypArc? It has a large number of global functions that can provide very useful. It came from the old LuaAppArc Development team that I was part of.

http://doubleh.pastebin.com/f54ff60d2 - Library
http://doubleh.pastebin.com/f4bfd2459 - Config Files
**Owner of the Serenade of Sorrow Funserver**
My Most Recent Video: The Book of Kidou
Posted Image
0

#3 User is offline   paroxysm 

  • Chatty Cathy
  • Group: Retired
  • Posts: 320
  • Joined: 25-June 08
  • Gender:Male
  • Server OS:Windows

Posted 28 February 2010 - 06:30 PM

I'll see what I can adapt but lot of those functions won't necessarily be used in ai scripts but mostly towards general scripting.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users