pts ai parser

gattsu

Выдающийся
Проверенный
Победитель в номинации 2018
Победитель в номинации 2017
За веру и верность форуму
За заслуги перед форумом
Преподаватель
Сообщения
165
Розыгрыши
0
Репутация
1 457
Реакции
293
Баллы
1 393


Делаю разбор pts скриптов, буду делать декомпилятор, и простой анализатор. Думаю перенести на java через модель акторов, идеально подходить. Парсинuг по типа org.xml.sax.

Если у вас есть пожелание, чтобы хотели видеть, или какую программу специально для работы с pts данными, можете отписать, если будет возможность смогу реализовать.
Версия 0.0.5
- Добавил multihandler для парсера. Теперь можно задать парсер с гл
- Добавил сканер имен интрукций, из содержимого
- Добавил сканер имен функций. Извлекаются из комментариев
- Добавил сканер имен обработчико. Извлекаются из комментариев
- Обновил архив

Версия 0.0.4
- исправлена ошибка при парсинге параметров. Встречаются параметры без типа.
- Добавлен метод обработки, новой строки. (Handler.newLine)

Версия 0.0.3
- исправил вызов pts.ai.Handler.propertyEnd в pts.ai.Parser
- добавил парсинг telposlist
- добавил парсинг buyselllist
- расширил функционал pts.ai.Handler
- spliter добавил сохранение тип класса, в заголовке (class 1 default_npc : (null))
- spliter добавил сохранение property
- spliter добавил сохранение telposlist
- spliter добавил сохранение buyselllist

Версия 0.0.2
- Буфферизировать чтение токенов наперед.
- Орагнизовать обратный просмотр токеном и прямой, без изменения курсора в lexer.(next(int) prev(int)).
- Возврат пробельных символов, как токены. Добавлен флаг для игнорирования пробельных символов.
- консольное приложение для разделения ai.obj, на файлы.

TODO
- просмотр токенов через handler.
- добавить handler для анализа кода
- сделать тесты
- написать статический анализ через хендлер(проверку валидных лейблов, строк(данных), параметров, свойст, количество строк в class handler, правельный порядок наследования и декларирования, не валидные хендлеры и тп )

ПС Опасно scala.
 
Последнее редактирование:

там в свое время Camelion и KilRoy Вели работы по Аи.Обж погугли вели дневник разработки... мб поможет чем...
 
Последнее редактирование модератором:
Версия 0.0.2
- Буфферизировать чтение токенов наперед.
- Орагнизовать обратный просмотр токеном и прямой, без изменения курсора в lexer.(next(int) prev(int)).
- Возврат пробельных символов, как токены. Добавлен флаг для игнорирования пробельных символов.
- консольное приложение для разделения ai.obj, на файлы.

Загрузить консольное приложени, можно, в разделе .
На данный момент, подерживается одна команда
Для использование необходима установленная scala 2.11.8 и jdk 1.8
Код:
     split --dst dst_dir --src src_file [-x]
      Команда для разделения файла ai.obj, по файлам-классам.
      Параметры:
       --dst папка назначения, куда будут сохраненны все файлы
       --src файл источник, откуда извлекаются все классы
      Флаги:
       -x - флаг указывает на создание папки-назначения, если её не существует, иначе отображается ошибка. Опционально.

Пример
Код:
ai split --dst target --src ai.obj -x
Будет создана папка target, если не существует.
Все классы содержащиеся в ai.obj будут записанны в отдельные файлы, для каждого класcа, имя файла ${class_name}.txt. Файлы будут созданы, или перезаписаны, в директории target.

Дополнительно будет созданно два файла
__globals.txt - содержит заголовок ai.obj
__order.txt - содержит список классов, в порядке их чтения, из ai.obj
 
  • Мне нравится
Реакции: kick
Обновил
0.0.3
- исправил вызов pts.ai.Handler.propertyEnd в pts.ai.Parser
- добавил парсинг telposlist
- добавил парсинг buyselllist
- расширил функционал pts.ai.Handler
- spliter добавил сохранение тип класса, в заголовке (class 1 default_npc : (null))
- spliter добавил сохранение property
- spliter добавил сохранение telposlist
- spliter добавил сохранение buyselllist
Данные, при сплите, теперь полностью сохраняются, в файлах
 
  • Мне нравится
Реакции: kick
Нечайно удалил проект, не запушил комиты, потерял интерпритатор. Теперь надо переписать немного коад

Версия 0.0.4
- исправлена ошибка при парсинге параметров. Встречаются параметры без типа.
- Добавлен метод обработки, новой строки. (Handler.newLine)
 
  • Мне нравится
Реакции: kick
Нечайно удалил проект, не запушил комиты, потерял интерпритатор. Теперь надо переписать немного коад

Версия 0.0.4
- исправлена ошибка при парсинге параметров. Встречаются параметры без типа.
- Добавлен метод обработки, новой строки. (Handler.newLine)
Могу пожертвовать исходы компилятора на руби рабочего, для развития проекта)
 
  • Мне нравится
Реакции: kick
Версия 0.0.5
- Добавил multihandler для парсера. Теперь можно задать парсер с гл
- Добавил сканер имен интрукций, из содержимого
- Добавил сканер имен функций. Извлекаются из комментариев
- Добавил сканер имен обработчико. Извлекаются из комментариев
- Обновил архив

Пример
Код:
    val test = Handlers.instructions :: Handlers.hnames :: Handlers.fnames :: Nil
    Parser("ai.obj", test).parse
    test.foreach { _.print(Console.out) }

Результат примера.
Отображает, в отсортированом виде, список имен: инструкций, обработчиков, функций.
add
add_string
and
assign
assign4
bit_and
bit_or
branch_false
branch_true
call_super
div
equal
exit_handler
fetch_d
fetch_f
fetch_i
fetch_i4
func_call
greater
greater_equal
jump
less
less_equal
mod
mul
negate
not
not_equal
or
push_const
push_event
push_parameter
push_property
push_reg_sp
push_string
shift_sp
sub
#GROUP 2
0 ON_START
1 ON_NPC_DELETED
2 ON_SCRIPT_EVENT
3 ON_DB_NPC_INFO
4 ON_TIMER
5 ON_NPC_CREATED
#GROUP 1
0 NO_DESIRE
1 ATTACKED
2 SPELLED
3 TALKED
4 TALK_SELECTED
5 SEE_CREATURE
10 MY_DYING
11 TIMER_FIRED
12 TIMER_FIRED_EX
13 CREATED
16 SEE_SPELL
17 OUT_OF_TERRITORY
18 DESIRE_MANIPULATION
19 PARTY_ATTACKED
21 PARTY_DIED
23 CLAN_ATTACKED
25 STATIC_OBJECT_CLAN_ATTACKED
28 TELEPORT_REQUESTED
31 QUEST_ACCEPTED
32 MENU_SELECTED
33 LEARN_SKILL_REQUESTED
34 ENCHANT_SKILL_REQUESTED
35 ONE_SKILL_SELECTED
36 ONE_ENCHANT_SKILL_SELECTED
38 CLASS_CHANGE_REQUESTED
39 MANOR_MENU_SELECTED
45 CREATE_PLEDGE
46 DISMISS_PLEDGE
47 REVIVE_PLEDGE
48 LEVEL_UP_PLEDGE
51 CREATE_ALLIANCE
52 SCRIPT_EVENT
53 TUTORIAL_EVENT
54 QUESTION_MARK_CLICKED
55 USER_CONNECTED
58 ATTACK_FINISHED
64 MOVE_TO_WAY_POINT_FINISHED
65 USE_SKILL_FINISHED
66 MOVE_TO_FINISHED
78 DOOR_HP_LEVEL_INFORMED
79 CONTROLTOWER_LEVEL_INFORMED
80 TB_REGISTER_PLEDGE_RETURNED
81 TB_REGISTER_MEMBER_RETURNED
82 TB_GET_NPC_TYPE_INFORMED
83 TB_SET_NPC_TYPE_RETURNED
84 TB_GET_PLEDGE_REGISTER_STATUS_INFORMED
85 TB_GET_BATTLE_ROYAL_PLEDGE_LIST_INFORMED
86 SUBJOB_LIST_INFORMED
87 SUBJOB_CREATED
88 SUBJOB_CHANGED
89 SUBJOB_RENEWED
90 ON_SSQ_SYSTEM_EVENT
91 SET_AGIT_DECO_RETURNED
92 RESET_AGIT_DECO_RETURNED
93 CLAN_DIED
95 SET_HERO_RETURNED
96 DELETE_PREVIOUS_OLYMPIAD_POINT_RETURNED
167837696 GetSpawnDefine
167837697 GetSpawnDefineByNick
167837698 IncreaseTotal
167837699 DecreaseTotal
167903236 AddTimerEx
184549401 RemoveAllAttackDesire
184549403 RandomizeAttackDesire
184549405 GetTopDesireValue
184549406 GetLifeTime
184549407 GetTick
184549408 GetCurrentTick
184549414 StopMove
184549428 GetTimeHour
184549433 GetPathfindFailCount
184549436 IsSpoiled
184549453 InstantRandomTeleportInMyTerritory
184549509 GetLastAttacker
184549527 Castle_GetPledgeName
184549528 Castle_GetOwnerName
184549529 Castle_GetSiegeTime
184549530 Residence_GetTaxRate
184549531 Residence_GetTaxRateCurrent
184549543 Castle_IsUnderSiege
184549546 Castle_BanishOthers
184549549 Castle_GetRawSiegeTime
184549550 Castle_GetRawSystemTime
184549553 Castle_GetPledgeId
184549554 Castle_GetLifeControlLevel
184549557 Agit_GetCostFailDay
184549586 Residence_GetTaxIncome
184549587 Residence_GetTaxIncomeReserved
184549588 Manor_GetSeedIncome
184549589 IsManorSettingTime
184549609 Maker_GetNpcCount
184549616 Despawn
184549617 Suicide
184549667 GetHateInfoCount
184549675 Lotto_GetState
184549677 Lotto_GetRoundNumber
184549680 Lotto_GetAccumulatedReward
184549685 Lotto_GetChosenNumber
184549714 GetSSQRoundNumber
184549715 GetSSQStatus
184549716 GetSSQWinner
184549754 CanLotto
184549768 GetOlympiadWaitingCount
184549769 GetClassFreeOlympiadWaitingCount
184549784 GetMyMaker
184549787 RemoveAllDesire
184614913 IsNullCreature
184614915 IsNullHateInfo
184614916 IsNullParty
184614934 AddPetDefaultDesire_Follow
184614938 RemoveAttackDesire
184614945 GetDirection
184614953 GetIndexFromCreature
184614954 GetCreatureFromIndex
184614955 GetCreatureFromID
184614956 IsStaticObjectID
184614959 GetStaticObjectFromID
184614961 UnregisterGlobalMap
184614962 GetGlobalMap
184614963 GetSummon
184614966 LookNeighbor
184614971 CanAttack
184614973 Say
184614976 EquipItem
184614978 Shout
184614996 DistFromMe
184614997 StaticObjectDistFromMe
184614999 SetTimerPeriod
184615002 OpenHennaItemListForEquip
184615003 OpenHennaListForUnquip
184615004 IntToStr
184615005 FloatToInt
184615006 GetMemoCount
184615017 SetCurrentQuestID
184615024 Party_GetCount
184615026 Party_GetLeader
184615027 GetLeaderOfParty
184615032 Pledge_GetLeader
184615033 GetParty
184615034 GetPledge
184615035 GetPledgeByIndex
184615053 GetPledgeSkillLevel
184615062 IsMyLord
184615068 Residence_SetTaxRate
184615077 Castle_GateOpenClose
184615078 Castle_GetPledgeState
184615097 Agit_GetDecoLevel
184615098 Agit_GetDecoExpire
184615107 ShowEnchantSkillList
184615127 Skill_GetConsumeHP
184615128 Skill_GetConsumeMP
184615129 Skill_GetEffectPoint
184615130 Skill_GetAttribute
184615131 Skill_GetAbnormalType
184615133 Skill_InReuseDelay
184615138 UseSoulShot
184615140 SetPrivateID
184615141 CreatePrivates
184615146 Maker_FindNpcByKey
184615156 InMyTerritory
184615167 StrToInt
184615172 CloseTutorialHTML
184615182 TB_RegisterPledge
184615183 TB_RegisterMember
184615184 TB_GetNpcType
184615187 TB_GetBattleRoyalPledgeList
184615195 OpenSiegeInfo
184615207 GetMaxHateInfo
184615209 RemoveHateInfoByCreature
184615217 Lotto_MakeFinalRewardFHTML
184615246 ShowManorDefaultInfo
184615253 GetSSQSealOwner
184615258 GetTimeOfSSQ
184615263 GetTicketBuyCount
184615265 GetSSQPart
184615267 IsJoinableToDawn
184615269 RegisterToEventListener
184615276 GetTimeAttackFee
184615281 GetAngleFromTarget
184615286 GetBingoSelectCount
184615288 GetMatchedBingoLineCount
184615289 ClearBingoBoard
184615293 IsNewbie
184615294 ShowQuestInfoList
184615300 AddOlympiad
184615301 GetOlympiadPoint
184615302 IsMainClass
184615303 AddClassFreeOlympiad
184615306 RemoveOlympiad
184615311 GetStatusForOlympiadField
184615312 GetPlayer1ForOlympiadField
184615313 GetPlayer2ForOlympiadField
184615315 SetNobless
184615316 SetHero
184615317 GetPreviousOlympiadPoint
184615321 SetEnchantOfWeapon
184615324 GetPartyFromID
184615325 ChangeMoveType
184680455 AddMoveAroundDesire
184680456 AddDoNothingDesire
184680461 AddFleeDesire
184680463 AddFollowDesire
184680484 GetCookie
184680487 AddTimerEx
184680496 RegisterGlobalMap
184680501 Summon_SetOption
184680513 Talk
184680515 ShoutEx
184680516 ShowPage
184680517 ShowSystemMessage
184680518 ShowSystemMessageStr
184680522 ShowTelPosListPage
184680529 ShowMultisell
184680536 GetWayPointDelay
184680537 ChangeStopType
184680543 HaveMemo
184680544 SetMemo
184680547 GetMemoState
184680549 RemoveMemo
184680554 GetOneTimeQuestFlag
184680556 GetInventoryInfo
184680557 GetAbnormalLevel
184680558 SetDBValue
184680559 HavePledgePower
184680561 Party_GetCreature
184680564 GetMemberOfParty
184680579 OwnItemCount
184680580 GetItemData
184680582 FHTML_SetFileName
184680586 ShowFHTML
184680609 Residence_VaultTakeOutMoney
184680610 Residence_VaultSaveMoney
184680624 Castle_GateOpenClose2
184680632 Agit_ResetDeco
184680637 Agit_GetDecoDay
184680638 Agit_GetDecoFee
184680639 Area_SetOnOff
184680640 AddChoice
184680641 ShowChoicePage
184680642 ShowSkillList
184680646 ShowEnchantSkillMessage
184680656 IsInCategory
184680657 ClassChange
184680670 UseSkill
184680685 SoundEffect
184680700 PledgeLevelUp
184680704 ShowTutorialHTML
184680706 ShowQuestionMark
184680709 EnableTutorialEvent
184680712 DeleteAllRadar
184680716 DestroyPet
184680717 RideWyvern
184680721 TB_SetNpcType
184680722 TB_GetPledgeRegisterStatus
184680725 CreateSubJob
184680726 ChangeSubJob
184680732 SetDoorHpLevel
184680733 GetDoorHpLevel
184680734 SetControlTowerLevel
184680735 GetControlTowerLevel
184680746 RemoveAllHateInfoIF
184680754 Lotto_ShowPrevRewardPage
184680755 Lotto_GiveReward
184680756 Lotto_ShowCurRewardPage
184680759 GetMaxSellableCount
184680760 GetCurrentSeedSellCountSet
184680761 GetCurrentSeedRemainCount
184680762 GetCurrentSeedPrice
184680763 GetNextSeedSellCountSet
184680764 GetNextSeedPrice
184680767 GetSeedDefaultPrice
184680768 GetProcurementRate
184680769 GetProcurementCount
184680770 GetProcurementType
184680771 GetRemainProcureCropCount
184680772 GetNextProcurementRate
184680773 GetNextProcurementCount
184680774 GetNextProcurementType
184680777 GetCropClassidByOrderNum
184680778 ShowSellSeedList
184680779 ShowProcureCropList
184680783 ShowSeedSetting
184680784 ShowCropSetting
184680785 ShowProcureCropDetail
184680800 SetTicketBuyCount
184680810 GetPartyFromEventRoom
184680813 IsWinnerOfTimeAttackEvent
184680814 GetTimeAttackRewardFlag
184680818 CreateBingoBoard
184680820 GetNumberFromBingoBoard
184680821 SelectBingoNumber
184680823 IsSelectedBingoNumber
184680831 ShowQuestMark
184680844 GetRankByOlympiadRankOrder
184680845 GetNameByOlympiadRankOrder
184680850 ObserveOlympiad
184680854 DeletePreviousOlympiadPoint
184680864 UpdatePCCafePoint
184745993 AddAttackDesire
184745998 AddFleeDesireEx
184746008 AddMoveSuperPointDesire
184746012 MakeAttackEvent
184746019 SetCookie
184746021 SetTeleportPosOnLost
184746039 BroadcastScriptEvent
184746055 BroadcastSystemMessage
184746081 SetMemoState
184746084 GetMemoStateEx
184746086 SetJournal
184746087 SetFlagJournal
184746091 SetOneTimeQuestFlag
184746110 OwnItemCountEx
184746111 GiveItem1
184746112 DropItem1
184746114 DeleteItem1
184746119 FHTML_SetInt
184746121 FHTML_SetStr
184746167 Agit_SetDeco
184746180 ShowGrowSkillMessage
184746187 ShowEtcSkillList
184746211 UseSpiritShot
184746219 IncrementParam
184746222 VoiceEffect
184746223 EffectMusic
184746260 GetSubJobList
184746263 RenewSubJob
184746286 Lotto_ShowBuyingPage
184746287 Lotto_BuyTicket
184746316 ShowSeedInfo
184746317 ShowCropInfo
184746331 GetDepositedSSQItemCount
184746344 AddPartyToEventRoom
184746345 ClearEventRoom
184746347 AddTimeAttackFee
184746363 AddLog
184746368 SetHTMLCookie
184746369 GetHTMLCookie
184811530 AddAttackDesireEx
184811537 AddMoveToWayPointDesire
184811540 AddMoveToDesire
184811541 AddEffectActionDesire
184811543 AddMoveToTargetDesire
184811576 BroadcastScriptEventEx
184811596 InstantTeleport
184811618 SetMemoStateEx
184811649 DropItem2
184811724 ShowGrowEtcSkillMessage
184811750 CreateOnePrivate
184811765 InstantTeleportInMyTerritory
184811768 EarthQuakeToParty
184811777 ShowTutorialHTML2
184811786 CreatePet
184811870 DeleteDepositedSSQItem
184811878 GetTimeAttackRecordInfo
184811887 GiveTimeAttackReward
184811900 AddLogEx
184877074 AddUseSkillDesire
184877318 ShowRadar
184877319 DeleteRadar
184877345 AddHateInfo
184877443 GetCloestPositionList
184877473 GiveItemByPCCafePoint
184942670 SellPreview
184942671 Sell
184942672 Buy
184942731 MakeFString
184942859 EvolvePet
184942937 AddSSQMember
184942941 DepositSSQItemEx
184942951 AddTimeAttackRecord
184942960 TeleportParty
185008147 AddUseSkillDesireEx
185008201 ShowSysMsgToParty2
185008375 EarthQuakeByNPC
185073739 Teleport
185270503 CreateOnePrivateEx
185270521 SpecialCamera
218103809 GetTimeOfDay
218103812 AllocCodeInfoList
218169344 Rand
218169346 GetL2Time
218169347 GetNpcMaker
218169350 GetNPCFromID
218169352 GetRoomInfoList
218169353 Announce
218169355 IsNull
218234887 CreateRoomInfoList
218234890 GetDateTime
218234894 IsSameString
218300428 SendScriptEvent
218365957 SendMakerScriptEvent
218431503 InstantTeleportEx
234881026 Despawn
234946563 IncCount
234946564 DecCount
234946565 LoadDBNpcInfo
234946567 SetDBLoaded
234946568 RegToRespawnTimer
235012096 Spawn
235077638 SendScriptEvent
235470849 SpawnEx
251658240 Next
251658242 RandomSelectOne
251789313 SetInfo
268435459 GetValue
268500992 Increment
268500993 Decrement
268500994 Exchange
268566532 CompareExchange
285212674 Clear
285212676 PartyChanged
285278208 GetMemberID
285278209 SetParty
302055424 GetRoomInfo
318832640 GetPosition
335544320 Next
335544321 RandomSelectOne
 
  • Мне нравится
Реакции: kick
Могу пожертвовать исходы компилятора на руби рабочего, для развития проекта)
в компиляторе проблем нету, у меня проблема интерпритор, сделать подход для java. Чтобы можно было транслировать код в javabytecode, и запускать. Или напрямую интерпритировать.
Я использую

Буду декомпилить в java и обратно, или непосредственно в java byte code.
 
Look this parser :
 
Назад
Сверху Снизу