Versione 0.3.0.8
Ho modificato delle funzionalità perché mi sono accorto che non erano il massimo mentre scrivevo la documentazione.
[Python] PyziUO - nuovo Script Engine per la uo.dll
Comprimi
Questa è una discussione evidenziata.
X
X
-
Ho fixato un bug su UO.Distance, cercava il type al posto del serial. La versione è la stessa ma l'ho ricompilato.Lascia un commento:
-
Versione 0.3.0.7
Modifiche:
- aggiunto il comando UO.IgnoreItem(serial o item)
- aggiunto il comando UO.ClearIgnoreList()
- cambiata la funzionalità di UO.FindItem, non esiste più UO.FindItems (vedi sotto)
- aggiunto il comando UO.FindType(type / array di types, container)
- sto testando la questione UO.TileInit, UO.TileCnt, UO.TileGet
- cambiata la uo.dll per supportare i client fino al 7.0.57.1, risolve anche il bug del UO.CliLang
UO.FindItem / UO.FindType
UO.FindItem
Argomenti: serial [, container] (facoltativo)
Cerca il singolo item partendo dal serial e riporta l'oggetto con le sue caratteristiche (ID, Type, Kind, X, Y, Z, Stack, Rep, Col).
UO.FindType
Argomenti: type o array di types [, container] (facoltativo)
Cerca tutti gli items con quel/quei type(s) e riporta un generatore (una specie di lista).
UO.IgnoreItem / UO.ClearIgnoreList
UO.IgnoreItem
Argomenti: serial / item
Permette di ignorare un item, ovvero non trovarlo con UO.FindItem/UO.FindType.
(La lista si resetta in automatico ad ogni istanza.)
UO.ClearIgnoreList
Argomenti: N/A
Pulisce la lista degli item ignorati.
Script per conoscere le proprie stats/res base senza undressare
codice:totalvalue = { 'Strength Bonus' : 0, 'Dexterity Bonus' : 0, 'Intelligence Bonus' : 0 } Hue = 80 UO.OpenPaperdoll() UO.Wait(20) items = UO.FindType(0, UO.ContID) for itm in items: if itm is None: continue props = UO.GetPropList(itm.ID) UO.Wait(10) if props is None: continue for k,v in totalvalue.iteritems(): if k in props.Keys: totalvalue[k] += int(props[k]) s = 'Strength = {0}'.format(UO.Str - totalvalue['Strength Bonus']) d = 'Dexterity = {0}'.format(UO.Dex - totalvalue['Dexterity Bonus']) i = 'Intelligence = {0}'.format(UO.Int - totalvalue['Intelligence Bonus']) res = ['Energy Resist', 'Poison Resist', 'Cold Resist', 'Fire Resist', 'Physical Resist'] ResSpell = UO.GetSkill("Resisting Spells").Real resval = 0 if 445 <= ResSpell < 550: resval = 5 elif ResSpell < 700: resval = 10 elif ResSpell < 850: resval = 20 elif ResSpell < 1000: resval = 30 elif ResSpell < 1100: resval = 40 elif ResSpell < 1200: resval = 42 elif ResSpell == 1200: resval = 44 UO.SysMessage('======== Char Base Props ========', Hue) for stat in [s,d,i]: UO.SysMessage(stat, Hue) for r in res: UO.SysMessage('{0} = {1}'.format(r, resval), Hue) UO.SysMessage('===============================', Hue)Ultima modifica di CookieLover; 01-07-2017, 03:05.Lascia un commento:
-
Versione 0.3.0.6
Ho fatto qualche modifica:
- ora si può usare UO.Cast(spell) con il nome della spell invece dell'indice
- si può cercare singoli item (UO.FindItem) e la lista totale degli item in un contenitore (UO.FindItems) con un array di tipi/seriali oltre che con il singolo id
- ho tolto l'argomento per cercare solo item visibili o anche invisibili, visto che pare non servisse a nulla o non funzionasse (??)
- ho aggiunto anche un modo per puntare la dll su un altro client nel caso ce ne fosse più di uno ma non l'ho ancora ben testato
- ora si può scrivere le EventMacro con un solo argomento nel caso il secondo fosse 0
- ora UO.LHandID e UO.RHandID sono settabili da script (prima per distrazione li avevo lasciati read-only)
Esempio dell'array di UO.FindItem(s):
codice:import clr clr.AddReference('System.Windows.Forms') from System import Array humantypes = Array[int]([0x190, 0x191]) humans = UO.FindItems(humantypes, 0) if not humans is None: UO.HeadMsg("Ci sono {0} pg/npc umani nei dintorni".format(len(humans)), 50)Ultima modifica di CookieLover; 24-06-2017, 20:15.Lascia un commento:
-
Ciao,
mi aggiungo anch'io ai complimenti, bel lavoro
Tra l'altro, come tu stesso dici, tanto PyziUO quanto Razor Enhanced utilizzano lo stesso engine IronPython: quindi - benchè immagino che gli script non saranno completamente intersambiabili tra i due sistemi... - penso che la maggior parte delle informazioni utili potranno essere condivise.
Buon game davvero!
MagnetoLascia un commento:
-
Alto livello perché è più user friendly. Inoltre alcune cose che su easyuo devono essere create dall'utente sono di base ormai in tutti i linguaggi di programmazione "moderni", come lo split delle stringhe, le liste e i dizionari. Per fare un esempio semplice, su EasyUO una lista di oggetti è una stringa infinita di codici separati da underscoreCiao Cookie, volevo farti i complimenti per il gran lavoro e contributo.
Ho delle domande, hai scritto che questo wrapper è di più alto livello rispetto ad easy uo, questo cosa implica? Mi spiego meglio gli script scritti con questo metodo sono "più lontani" rispetto a quelli in easy uo?
Ovvero, dato che le istruzioni di alto livello vengono sempre poi tradotte in quelle di più basso livello, ti chiedo se il più alto livello di questo tool, corrisponde ad affrontare "più gradini" ad uno script per arrivare poi alle azioni da svolgere nel client.
Grazie ancora, un saluto.
EasyUO
C#codice:set %doors WOC_VOC_GPC_FPC_IPC_HPC_CPC_BPC_EPC_DPC_
Pythoncodice:List<string> doors = new List<string> { "WOC", "VOC, "GPC", "FPC", "IPC", "HPC", "CPC", "BPC", "EPC", "DPC" };
Per lo Split:codice:doors = ["WOC", "VOC, "GPC", "FPC", "IPC", "HPC", "CPC", "BPC", "EPC", "DPC"]
EasyUO
String Split
Python
Una stringa definita dall'utente con dentro delle variabili deve seguire un iter di costruzione particolarecodice:res = "this|is|an|example".split('|')
EasyUO
Pythoncodice:set %msg La , #spc , tua , #spc , forza , #spc , è , #spc , #str , .
oppurecodice:msg = 'La tua forza è ' + str(UO.Str) + '.'
oppurecodice:msg = 'La tua forza è %d.' % UO.Str
codice:msg = 'La tua forza è {0}.'.format(UO.Str)Lascia un commento:
-
Ciao Cookie, volevo farti i complimenti per il gran lavoro e contributo.
Ho delle domande, hai scritto che questo wrapper è di più alto livello rispetto ad easy uo, questo cosa implica? Mi spiego meglio gli script scritti con questo metodo sono "più lontani" rispetto a quelli in easy uo?
Ovvero, dato che le istruzioni di alto livello vengono sempre poi tradotte in quelle di più basso livello, ti chiedo se il più alto livello di questo tool, corrisponde ad affrontare "più gradini" ad uno script per arrivare poi alle azioni da svolgere nel client.
Grazie ancora, un saluto.Lascia un commento:
-
-
-
Grazie, ora come ora il problema principale è sullo scan del journalLascia un commento:
-
Come eventhandler non credo puoi farlo (a meno che non fai un injection al client).
Vedi se ti piace questa soluzione: https://pastebin.com/CFwpvf8W
importi nello script la funzione IsKeyDown ed hai fattoLascia un commento:
-
Sì, uso quello, ma non sapendo come trasformarlo in un event handler, lo uso come funzione che restituisce un booleano.Magari lo utilizzi giá, ma te lo segnalo lo stesso:
Permette di prendere i tasti premuti (con relative combinazioni).codice:[DllImport("user32.dll")] static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
Usato opportunatamente puoi emulare al 100% easyuo/openeuo da questo pubto di vista (utilizzano proprio questa funzione). Ciao frankinoLascia un commento:
-
Magari lo utilizzi giá, ma te lo segnalo lo stesso:
Permette di prendere i tasti premuti (con relative combinazioni).codice:[DllImport("user32.dll")] static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
Usato opportunatamente puoi emulare al 100% easyuo/openeuo da questo pubto di vista (utilizzano proprio questa funzione). Ciao frankinoLascia un commento:
-
Finalmente sono riuscito a mettere le hotkey "come" su EasyUO, la nuova release ha l'esempio tra gli scripts (OnHotkey.py) che riporto qua:
Altro esempiocodice:while UO.CliLogged: while not UO.OnHotkey('f10', 'ctrl'): UO.Wait(1) UO.HeadMsg("Hai premuto ctrl+f10!", 30) break
Per la lista dei tasti disponibili vedere OnHotkeycodice:while UO.CliLogged: if UO.OnHotkey('f10', 'ctrl'): UO.HeadMsg("Hai premuto ctrl+f10!", 30) if UO.OnHotkey('A'): UO.HeadMsg('Stoppo lo script...', 70) break UO.Wait(1)Ultima modifica di CookieLover; 15-06-2017, 21:38.Lascia un commento:

Lascia un commento: