ceshare is a lua extension that, in the background, connects to a website (by
default cheatengine.org, but you're free to implement your own database...) and
querries information about the currently opened process
Information about the process is gained from initially doing a md5sum of
the first 4096 bytes of the process and the processname. (this allows for
version specific data, as the peheader also has information like section sizes
which often change on different builds)
If that still ends up being ambiguous(the server tells you), do a md5sum of the
whole file, or give an md5 sum of a modulename list that the server tells you to
check instead. (e.g in case of unchanged game.exe but different game.dll)
If still ambiguous, let the user pick from a list
once a correct build has been found, (or there is version independant data based
on the processname ) show the user some options.
Like loading a table, or just open a browser window with information about using
CE on it. (Or even executing a cheat directly from that window, e.g luascript)
Each entry should have a kind of rating (symbolized using 5 stars) and perhaps
comments as well
People should be able to add their own data and tables to the database, if they
have a CE username and password
They can decide to have their entry editable by everyone, or only those in an
specific access list.
database schema:
CheatList --list containing all cheat descriptors+who owns them
id: integer
owneruserid: integer
lastEditorUserID: integer
lastEditorIP: string
lastEditTime: integer
description: text
public: bool - Editable by everyone, else editable only by the owner and by people in the accesslist
processnamemd5: binary(16) (index)
versionIndependant: bool --if set, only the processname matters
ratingtotal: integer
ratingcount: integer -ratingtotal/ratingcount = stars
accessCount: integer -Number of times the cheatdata has been fetched (cheatlist won't count)
headermd5: binary(16) (index)
fullfilehashmd5: binary(16) - if set, and there are multiple results, use this
secondarymodulename: string -- if set, use this. (before fullfilehash)
secondaryfullfilehashmd5: binary(16)
LuaScriptToCheckForMatch: string/blob --only for very trusted members, let the user execute this lua script. If it returns true, it's valid
datatype: integer - 0=table, 1=URL, 2=Lua script
data: long text
History
Historyid: integer;
cheatId: integer
oldedittime: integer
olddescription: integer
olddatatype: integer
olddata: BLOB
oldlastEditorUserID: integer;
oldlastEditorIP: string
Reports:
-reportid: integer
cheatid: integer;
commentid: integer -can be null if cheat report
explenation: text
Ratings --keep track of what the users have rated (rating is only possible when logged in)
-id: integer
-userid: integer
rated: integer
Comments:
-commentid: integer
-cheatid: integer
userid: integer
comment: text
commentDateTime: dateTime --time of the comment
AccessList:
-id: integer
-userid: integer
Requests:
-requestid
processnamemd5
headermd5 --for specific versions
userid
commentsonwhat
time
Sessions
-sessionid: binary(16)
ip: integer
userid: integer
lastUpdate: integer --if longer than 1 hour delete this entry
LoginFloodProtect
ip: integer
lastloginattempt: integer
php api:
QueryProcessCheats(processnamemd5, headermd5)
Returns all entries matching this process and header, or only process if versionIndependant is true
format: (xml)
description
description ...
If multiple results, the lua script will have to check fullfilehash and secondarymodulename to filter out entries that do not match
Then show the results to the user
QueryProcessRequests(processnamemd5, headermd5)
Same as QueryProcessCheats, but for requests
GetCheatData(id)
Returns the type and data
Login(username, password)
On success, returns a sessionid you can use for things that require a login (sessionid is only valid for the IP used to login)
Logout(sessionid):
Expires the session
PublishCheat(sessionid, cheatdata, processnamemd5, headermd5, versionindependant, description, public, datatype, fullfilehash OPT,secondarymodulename OPT, secondaryfullfilehashmd5 OPT, LuaScript OPT/ADMIN, )
On success returns a cheatid
ModifyCheat(sessionid,cheatid,headermd5, versionindependant, description, public(only from 0 to 1), datatype, fullfilehash OPT,secondarymodulename OPT, secondaryfullfilehashmd5 OPT, LuaScript OPT/ADMIN)
addAccess(sessionid,cheatid,username)
revokeAccess(sessionid,cheatid,username)
PlaceRequest(sessionid, processnamemd5,headermd5 opt, comment)
RemoveReQuest(sessionid, requestid)
ReportCheat(cheatid, reason) --no need to login
ReportComment(commentid, reason)
GetComments(id, startcount, maxcount):
Returns the comments
Rate(sessionid, cheatid, score1to5)
CheckForUpdate()
Returns the current version
GetLatestVersion()
Returns the updated files
urltofileurltofile