Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Want to make a little script (flash/pcode inside)

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
LtO
Advanced Cheater
Reputation: 0

Joined: 09 Mar 2015
Posts: 56

PostPosted: Wed Feb 21, 2018 2:25 pm    Post subject: Want to make a little script (flash/pcode inside) Reply with quote

Hi, I want to make a little script for a game that changes your blocks in the game. I think it's pretty easy since there is an item in the game and when you get it, it does this function... I'm not good yet at finding the right values and integers etc, but I realised I could also make a little script in assembly I guess. So here is the code of what I want to change in the game (whenever I want), and what it does:::

Decompiled swf:
Code:
package TetrionShell,scripts,live
{
   import TetrionCore,Components,TetPiece;
   import TetrionCore,Components,TetStandardPieces;
   import TetrionShell,Tetrion;
   
   public class LiveItemAllIPieces extends LiveItem
   {
       
     
      private var mNumPieces:int;
     
      public function LiveItemAllIPieces(param1:int, param2:Tetrion)
      {
         this,mIsVisibleToAll = true;
         this,mDuration = 10000;
         this,mActiveType = LiveItem,kActiveTypeDuration;
         super(param1,param2);
         this,mNumPieces = 5;
         this,mItemType = LiveItem,kItemTypePositive;
      }
     
      override public function Update(param1:Number) : void
      {
         var _loc2_:* = null;
         if(!this,mIsActive)
         {
            this,Remove();
         }
         else if(this,mTetrion,GetPlayerAt(this,mTargetId,0),GetPieceQueue(),Peek(5),GetPieceTypeID() != TetStandardPieces,k_TetStandardPieces_PieceID_I)
         {
            _loc2_ = TetStandardPieces,CreateNewPiece(TetStandardPieces,k_TetStandardPieces_PieceID_I,true);
            _loc2_,SetAllMinosIsSticky(false,false);
            this,mTetrion,GetPlayerAt(this,mTargetId,0),GetPieceQueue(),AddPieceAtIndex(_loc2_,5);
         }
      }
     
      override public function Remove() : void
      {
         var _loc1_:int = 0;
         while(_loc1_ < 6)
         {
            if(this,mTetrion,GetPlayerAt(this,mTargetId,0),GetPieceQueue(),Peek(0),GetPieceTypeID() == TetStandardPieces,k_TetStandardPieces_PieceID_I)
            {
               this,mTetrion,GetPlayerAt(this,mTargetId,0),GetPieceQueue(),Pop(true);
            }
            _loc1_++;
         }
      }
     
      override public function Apply(param1:int, param2:int, param3:String) : void
      {
         var _loc4_:* = null;
         super,Apply(param1,param2,param3);
         this,mTetrion,PlayLibrarySFX("FX_I_PIECE");
         var _loc5_:int = 0;
         while(_loc5_ < 6)
         {
            _loc4_ = TetStandardPieces,CreateNewPiece(TetStandardPieces,k_TetStandardPieces_PieceID_I,true);
            _loc4_,SetAllMinosIsSticky(false,false);
            this,mTetrion,GetPlayerAt(this,mTargetId,0),GetPieceQueue(),AddPieceAtIndex(_loc4_,_loc5_);
            _loc5_++;
         }
      }
   }
}


And Pcode:
Code:
trait slot Qname(PrivateNamespace("*","474"),"mNumPieces")
slotid 0
type Qname(PackageNamespace(""),"int")
value Undefined
end ; trait

method
name null
param Qname(PackageNamespace(""),"int")
param Qname(PackageNamespace("TetrionShell"),"Tetrion")
returns null

body
maxstack 3
localcount 3
initscopedepth 5
maxscopedepth 6

code
; d0
getlocal_0
; 30
pushscope
; d0
getlocal_0
; 26
pushtrue
; 68 83 26
initproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mIsVisibleToAll")
; d0
getlocal_0
; 25 90 4e
pushshort 10000
; 68 8b 08
initproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mDuration")
; d0
getlocal_0
; 60 88 01
getlex Qname(PackageNamespace("TetrionShell,scripts,live"),"LiveItem")
; 66 fa 0d
getproperty Qname(PackageNamespace(""),"kActiveTypeDuration")
; 68 80 11
initproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mActiveType")
; d0
getlocal_0
; d1
getlocal_1
; d2
getlocal_2
; 49 02
constructsuper 2
; d0
getlocal_0
; 24 05
pushbyte 5
; 68 f2 4d
initproperty Qname(PrivateNamespace("*","474"),"mNumPieces")
; d0
getlocal_0
; 60 88 01
getlex Qname(PackageNamespace("TetrionShell,scripts,live"),"LiveItem")
; 66 dd 0b
getproperty Qname(PackageNamespace(""),"kItemTypePositive")
; 68 f2 06
initproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mItemType")
; 47
returnvoid
end ; code
end ; body
end ; method

trait method Qname(PackageNamespace(""),"Update")
flag OVERRIDE
dispid 0
method
name null
param Qname(PackageNamespace(""),"Number")
returns Qname(PackageNamespace(""),"void")

body
maxstack 3
localcount 3
initscopedepth 5
maxscopedepth 6

code
; d0
getlocal_0
; 30
pushscope
; 20
pushnull
; 80 25
coerce Qname(PackageNamespace("TetrionCore,Components"),"TetPiece")
; d6
setlocal_2
; d0
getlocal_0
; 66 a9 09
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mIsActive")
; 11 09 00 00
iftrue ofs0017
; d0
getlocal_0
; 4f a7 03 00
callpropvoid Qname(PackageNamespace(""),"Remove") 0
; 10 52 00 00
jump ofs0069
; d0
ofs0017:getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; d0
getlocal_0
; 66 bc 02
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTargetId")
; 24 00
pushbyte 0
; 46 5f 02
callproperty Qname(PackageNamespace(""),"GetPlayerAt") 2
; 46 a9 05 00
callproperty Qname(PackageNamespace(""),"GetPieceQueue") 0
; 24 05
pushbyte 5
; 46 ea 22 01
callproperty Qname(PackageNamespace(""),"Peek") 1
; 46 f5 02 00
callproperty Qname(PackageNamespace(""),"GetPieceTypeID") 0
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 66 d9 06
getproperty Qname(PackageNamespace(""),"k_TetStandardPieces_PieceID_I")
; 13 2e 00 00
ifeq ofs0069
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 66 d9 06
getproperty Qname(PackageNamespace(""),"k_TetStandardPieces_PieceID_I")
; 26
pushtrue
; 46 f1 01 02
callproperty Qname(PackageNamespace(""),"CreateNewPiece") 2
; 80 25
coerce Qname(PackageNamespace("TetrionCore,Components"),"TetPiece")
; d6
setlocal_2
; d2
getlocal_2
; 27
pushfalse
; 27
pushfalse
; 4f 87 03 02
callpropvoid Qname(PackageNamespace(""),"SetAllMinosIsSticky") 2
; d0
getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; d0
getlocal_0
; 66 bc 02
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTargetId")
; 24 00
pushbyte 0
; 46 5f 02
callproperty Qname(PackageNamespace(""),"GetPlayerAt") 2
; 46 a9 05 00
callproperty Qname(PackageNamespace(""),"GetPieceQueue") 0
; d2
getlocal_2
; 24 05
pushbyte 5
; 4f bb 28 02
callpropvoid Qname(PackageNamespace(""),"AddPieceAtIndex") 2
; 47
ofs0069:returnvoid
end ; code
end ; body
end ; method
end ; trait

trait method Qname(PackageNamespace(""),"Remove")
flag OVERRIDE
dispid 0
method
name null
returns Qname(PackageNamespace(""),"void")

body
maxstack 3
localcount 2
initscopedepth 5
maxscopedepth 6

code
; d0
getlocal_0
; 30
pushscope
; 24 00
pushbyte 0
; d5
setlocal_1
; 10 3d 00 00
jump ofs0046
; 09
ofs0009:label
; d0
getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; d0
getlocal_0
; 66 bc 02
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTargetId")
; 24 00
pushbyte 0
; 46 5f 02
callproperty Qname(PackageNamespace(""),"GetPlayerAt") 2
; 46 a9 05 00
callproperty Qname(PackageNamespace(""),"GetPieceQueue") 0
; 24 00
pushbyte 0
; 46 ea 22 01
callproperty Qname(PackageNamespace(""),"Peek") 1
; 46 f5 02 00
callproperty Qname(PackageNamespace(""),"GetPieceTypeID") 0
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 66 d9 06
getproperty Qname(PackageNamespace(""),"k_TetStandardPieces_PieceID_I")
; 14 16 00 00
ifne ofs0044
; d0
getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; d0
getlocal_0
; 66 bc 02
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTargetId")
; 24 00
pushbyte 0
; 46 5f 02
callproperty Qname(PackageNamespace(""),"GetPlayerAt") 2
; 46 a9 05 00
callproperty Qname(PackageNamespace(""),"GetPieceQueue") 0
; 26
pushtrue
; 4f 8c 16 01
callpropvoid Qname(PackageNamespace(""),"Pop") 1
; c2 01
ofs0044:inclocal_i 1
; d1
ofs0046:getlocal_1
; 24 06
pushbyte 6
; 15 bc ff ff
iflt ofs0009
; 47
returnvoid
end ; code
end ; body
end ; method
end ; trait

trait method Qname(PackageNamespace(""),"Apply")
flag OVERRIDE
dispid 0
method
name null
param Qname(PackageNamespace(""),"int")
param Qname(PackageNamespace(""),"int")
param Qname(PackageNamespace(""),"String")
returns Qname(PackageNamespace(""),"void")

body
maxstack 4
localcount 6
initscopedepth 5
maxscopedepth 6

code
; d0
getlocal_0
; 30
pushscope
; 20
pushnull
; 80 25
coerce Qname(PackageNamespace("TetrionCore,Components"),"TetPiece")
; 63 04
setlocal 4
; d0
getlocal_0
; d1
getlocal_1
; d2
getlocal_2
; d3
getlocal_3
; 4e 90 01 03
callsupervoid Qname(PackageNamespace(""),"Apply") 3
; d0
getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; 2c ca 2a
pushstring "FX_I_PIECE"
; 4f 1c 01
callpropvoid Qname(PackageNamespace(""),"PlayLibrarySFX") 1
; 24 00
pushbyte 0
; 63 05
setlocal 5
; 10 33 00 00
jump ofs0054
; 09
ofs0021:label
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 60 49
getlex Qname(PackageNamespace("TetrionCore,Components"),"TetStandardPieces")
; 66 d9 06
getproperty Qname(PackageNamespace(""),"k_TetStandardPieces_PieceID_I")
; 26
pushtrue
; 46 f1 01 02
callproperty Qname(PackageNamespace(""),"CreateNewPiece") 2
; 80 25
coerce Qname(PackageNamespace("TetrionCore,Components"),"TetPiece")
; 2a
dup
; 63 04
setlocal 4
; 27
pushfalse
; 27
pushfalse
; 4f 87 03 02
callpropvoid Qname(PackageNamespace(""),"SetAllMinosIsSticky") 2
; d0
getlocal_0
; 66 8e 01
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTetrion")
; d0
getlocal_0
; 66 bc 02
getproperty Qname(ProtectedNamespace("TetrionShell,scripts,live:LiveItem"),"mTargetId")
; 24 00
pushbyte 0
; 46 5f 02
callproperty Qname(PackageNamespace(""),"GetPlayerAt") 2
; 46 a9 05 00
callproperty Qname(PackageNamespace(""),"GetPieceQueue") 0
; 62 04
getlocal 4
; 62 05
getlocal 5
; 4f bb 28 02
callpropvoid Qname(PackageNamespace(""),"AddPieceAtIndex") 2
; c2 05
inclocal_i 5
; 62 05
ofs0054:getlocal 5
; 24 06
pushbyte 6
; 15 c5 ff ff
iflt ofs0021
; 47
returnvoid
end ; code
end ; body
end ; method
end ; trait


I'd be happy with some help Smile I'm trying to learn but still very much a noob I'm afraid :p

Edit: I had to replace all the dots (.) with a comma in the code, cuz it says I cannot post urls...
Back to top
View user's profile Send private message
Aylin
Expert Cheater
Reputation: 2

Joined: 16 Feb 2017
Posts: 154

PostPosted: Wed Feb 21, 2018 4:10 pm    Post subject: Reply with quote

A long time, Cheat Engine Forums:
The game is cut and the related codes are off.
In such cases, publications are banned because they affect the site.
I recommend you watch Flash Decompler videos
and it will have to delete this post. Wink

If you want a script file:
you want it without the game cutting code.
It's just a recommendation. The decision is again in management. Rolling Eyes

_________________
See Hitler ! This Trainer is for you!
http://forum.cheatengine.org/viewtopic.php?t=606786
Enthusiastic people: Always one step ahead!
Do not underestimate me Master: You were a beginner in the past!
Back to top
View user's profile Send private message MSN Messenger
LtO
Advanced Cheater
Reputation: 0

Joined: 09 Mar 2015
Posts: 56

PostPosted: Wed Feb 21, 2018 4:15 pm    Post subject: Reply with quote

Aylin wrote:
A long time, Cheat Engine Forums:
The game is cut and the related codes are off.
In such cases, publications are banned because they affect the site.
I recommend you watch Flash Decompler videos
and it will have to delete this post. Wink

If you want a script file:
you want it without the game cutting code.
It's just a recommendation. The decision is again in management. Rolling Eyes


Mmmm ok, but how does this affect the site? It would be hard to post that whole game here, lots and lots of code, and even harder for you guys to take a look at then :p I thought this code was actually enough to know what we should be looking for in the memory, value or address etc...
Back to top
View user's profile Send private message
Aylin
Expert Cheater
Reputation: 2

Joined: 16 Feb 2017
Posts: 154

PostPosted: Wed Feb 21, 2018 4:41 pm    Post subject: Reply with quote

LtO wrote:


Mmmm ok, but how does this affect the site? It would be hard to post that whole game here, lots and lots of code, and even harder for you guys to take a look at then :p I thought this code was actually enough to know what we should be looking for in the memory, value or address etc...


http://forum.cheatengine.org/viewtopic.php?t=216418
Any game cut, consists perception like this site directing.
This is not the place.
This site is not a hacker, delete this detection.
I offer you a free subsite. Wink
http://fearlessrevolution.com/index.php

_________________
See Hitler ! This Trainer is for you!
http://forum.cheatengine.org/viewtopic.php?t=606786
Enthusiastic people: Always one step ahead!
Do not underestimate me Master: You were a beginner in the past!
Back to top
View user's profile Send private message MSN Messenger
TheyCallMeTim13
Wiki Contributor
Reputation: 14

Joined: 24 Feb 2017
Posts: 440
Location: 'Merica

PostPosted: Wed Feb 21, 2018 4:51 pm    Post subject: Reply with quote

Aylin wrote:
LtO wrote:


Mmmm ok, but how does this affect the site? It would be hard to post that whole game here, lots and lots of code, and even harder for you guys to take a look at then :p I thought this code was actually enough to know what we should be looking for in the memory, value or address etc...


http://forum.cheatengine.org/viewtopic.php?t=216418
Any game cut, consists perception like this site directing.
This is not the place.
This site is not a hacker, delete this detection.
I offer you a free subsite. Wink
http://fearlessrevolution.com/index.php


I don't know much about flash/SWF, but what I understand is these run on the user's computer not a server. And I really don't understand what you're saying, and you may actually want to read the rules you posted as there is nothing in them that pertains to this. And Fearless uses CEF rules too.

_________________
Back to top
View user's profile Send private message
Aylin
Expert Cheater
Reputation: 2

Joined: 16 Feb 2017
Posts: 154

PostPosted: Wed Feb 21, 2018 5:14 pm    Post subject: Reply with quote

Maybe I misunderstand.
Because of these issues,
  I remember that the site was temporarily closed.
But if the masters would argue otherwise,
I may have misunderstood the rules. Rolling Eyes

http://forum.cheatengine.org/viewtopic.php?t=603323

_________________
See Hitler ! This Trainer is for you!
http://forum.cheatengine.org/viewtopic.php?t=606786
Enthusiastic people: Always one step ahead!
Do not underestimate me Master: You were a beginner in the past!
Back to top
View user's profile Send private message MSN Messenger
Corroder
Grandmaster Cheater
Reputation: 17

Joined: 10 Apr 2015
Posts: 621

PostPosted: Wed Feb 21, 2018 7:14 pm    Post subject: Reply with quote

Example

part of SWF :

Code:


-- This part to set player live items
-- Default live = 5 reference in 'this.mNumPieces = 5;'

public function LiveItemAllIPieces(param1:int, param2:Tetrion)
      {
         this,mIsVisibleToAll = true;
         this,mDuration = 10000;
         this,mActiveType = LiveItem,kActiveTypeDuration;
         super(param1,param2);
         this,mNumPieces = 5;
         this,mItemType = LiveItem,kItemTypePositive;
      }


Part of Pcode :

Code:
getlocal_0
; 24 05
pushbyte 5
; 68 f2 4d
initproperty Qname(PrivateNamespace("*","474"),"mNumPieces")


So, we get AOB for this 'live item' = 24 05 68 f2 4d
then if we want change this live item to 10, we use replacer AOB = 24 10 68 f2 4d
and so on.

Remember,SWF file constructed could be by sprites, shapes, images, frames, others and ActionScripts.
You can edit these kind elements using JPEXS Decompiler, soThinkSWF Decompiler, or other SWF Decomp app.
Just look first if SWF header is protected or not.

_________________
Singapore Sling + Johnnie Walker + Some Peanuts....
Back to top
View user's profile Send private message
LtO
Advanced Cheater
Reputation: 0

Joined: 09 Mar 2015
Posts: 56

PostPosted: Thu Feb 22, 2018 7:28 am    Post subject: Reply with quote

Corroder wrote:
Example

part of SWF :

Code:


-- This part to set player live items
-- Default live = 5 reference in 'this.mNumPieces = 5;'

public function LiveItemAllIPieces(param1:int, param2:Tetrion)
      {
         this,mIsVisibleToAll = true;
         this,mDuration = 10000;
         this,mActiveType = LiveItem,kActiveTypeDuration;
         super(param1,param2);
         this,mNumPieces = 5;
         this,mItemType = LiveItem,kItemTypePositive;
      }


Part of Pcode :

Code:
getlocal_0
; 24 05
pushbyte 5
; 68 f2 4d
initproperty Qname(PrivateNamespace("*","474"),"mNumPieces")


So, we get AOB for this 'live item' = 24 05 68 f2 4d
then if we want change this live item to 10, we use replacer AOB = 24 10 68 f2 4d
and so on.

Remember,SWF file constructed could be by sprites, shapes, images, frames, others and ActionScripts.
You can edit these kind elements using JPEXS Decompiler, soThinkSWF Decompiler, or other SWF Decomp app.
Just look first if SWF header is protected or not.


Oh Thanks, yes I use jpexs decompiler, that's where I got this code, I used sothink before but this one works much better for me, also sothink crashed when i loaded this swf, probably cuz of an antidebugger...

As for this script maybe it's a bit unclear since it's just a very small part of that game's code, but I don't really need this 'liveitem', I only want to do what this 'liveitem'/function does, which is changing all your pieces in I pieces. This is a tetris game so you get different pieces in a random order, and I just want all the pieces that I get be the long, 4blocks tetris pieces, that have a particular id... And this item in the game (that you can receive if you are in the right room), creates that function for a limited time of 10seconds...
Back to top
View user's profile Send private message
Corroder
Grandmaster Cheater
Reputation: 17

Joined: 10 Apr 2015
Posts: 621

PostPosted: Thu Feb 22, 2018 8:01 am    Post subject: Reply with quote

It's too difficult if not see all SWF part or scripts.
But,

Quote:
.....which is changing all your pieces in I pieces


We can change 'Images' on SWF file using JPEXS.
First you need find 'The block' which you want to use to change other 'blocks'
Find 'The Block' at image / shape section. Once you found it then save to your PC.
Next find again every 'blocks' you want to change. Change it with 'The block' as you have bee save on your PC. Save your SWF and try play the game.
Remember, 'The block' dimension must have same size with each 'blocks' you change. So, you need resize 'The block' dimension (width,height). Maybe using Microsoft Picture Manager.

_________________
Singapore Sling + Johnnie Walker + Some Peanuts....
Back to top
View user's profile Send private message
LtO
Advanced Cheater
Reputation: 0

Joined: 09 Mar 2015
Posts: 56

PostPosted: Thu Feb 22, 2018 9:53 am    Post subject: Reply with quote

Corroder wrote:
It's too difficult if not see all SWF part or scripts.
But,

Quote:
.....which is changing all your pieces in I pieces


We can change 'Images' on SWF file using JPEXS.
First you need find 'The block' which you want to use to change other 'blocks'
Find 'The Block' at image / shape section. Once you found it then save to your PC.
Next find again every 'blocks' you want to change. Change it with 'The block' as you have bee save on your PC. Save your SWF and try play the game.
Remember, 'The block' dimension must have same size with each 'blocks' you change. So, you need resize 'The block' dimension (width,height). Maybe using Microsoft Picture Manager.


Yes, I guess you can change those things, but probably not in a live, multiplayer game you play online... Jpexs does have a feature to edit swf in the memory, but that didn't work. Also I'm sure it's not necessary to make it that complicated, it cannot be that hard to change all your pieces to that one piece... In fact it has been done in another game very similar to this one in code, maybe I should try to get it that way... Cuz I already made a hack for this game that also worked for the other one so Smile Thanks for the help.
Back to top
View user's profile Send private message
LtO
Advanced Cheater
Reputation: 0

Joined: 09 Mar 2015
Posts: 56

PostPosted: Thu Feb 22, 2018 7:28 pm    Post subject: Reply with quote

I'm kinda stuck with this, and it frustrates me... I would even pay someone to help me :p

Any other tips or things I could try?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites