[Ajuda] Novos Objetos Dynamicos
#1

Boa Noite.
Depois de muito tempo parado, voltei a brincar com SA-MP...
Eu tenho um GM onde eu coloquei praticamente todos os objetos assim = CreateDynamicObject..
Quando fui atualizar o Streamer(agora й a versгo v2.7. deu um erro assim
"Streamer Plugin: CreateDynamicObject: Expecting 12 parameter(s) but found 11 With latest streamer plugin/include"

Eu pesquisei bastante e nгo encontrei uma soluзгo, dai coloquei alguns dos objetos assim "CreateDynamicObjectEX" por alguma bruxaria desconhecida por mim todos os objetos voltaram a funcionar(mesmo os que eu nгo mudei) e parou o anuncio de Erro quando o GM abria.. sу que agora fui explorar o GameMode e ainda existem Objetos que nгo estгo aparecendo..

Duvidas tem algum programa que converte os CreateDynamicObject antigos do Icognito para a nova versгo?

O meu estб assim CreateDynamicObject(ID, x, y, z, rx, ry, rz);

O novo estб assim CreateDynamicObject(modelid, Float, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Floattreamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD);
Reply
#2

Quote:
Originally Posted by Rodox_Mortein
Посмотреть сообщение
Duvidas tem algum programa que converte os CreateDynamicObject antigos do Icognito para a nova versгo?

O meu estб assim CreateDynamicObject(ID, x, y, z, rx, ry, rz);

O novo estб assim CreateDynamicObject(modelid, Float, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Floattreamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD);
Se nгo existir na internet, vocк pode ser o primeiro a desenvolver isso, este й o bom de ser desenvolvedor


Eu fiz um pequeno exemplo aqui para vocк dar uma estudada, utilizei estruturas bбsicas de python juntamente com conceitos de Programaзгo Orientada a Objetos, talvez isso possa te motivar a querer aprender mais sobre a бrea.

Source:
PHP код:
# -*- encoding: UTF-8 -*-
'''
CreateDynamicObject(ID, x, y, z,   rx, ry, rz);
CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz
, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD);
'''
class IncognitoConverter:
    
method_name None
    def __init__
(selfpattern):
        
self.pattern pattern
        self
.result = []
    
def set_pattern(selfpattern):
        
self.pattern pattern
    def cast_process
(selfold):
        
self.file old.file
        self
.old_pattern old.pattern
        self
.execute()
    
def execute(self):
        
with open(self.file"r") as infile:
            for 
line in infile:
                
self.extract_tokens(line)
                
self.catch_new_tokens()
                
self.process_message()
        
self.save_file()
    
def extract_tokens(selfline):
        
'''tmp = self.old_pattern
        arr_tokens = tmp[tmp.find('
(') + 1 : tmp.find(')')].split(',')
        self.tokens = arr_tokens'''
        
tmp line
        arr_tokens 
tmp[tmp.find('(') + tmp.find(')')].split(',')
        
self.tokens arr_tokens
    def save_file
(self):
        
with open('casted_objects.txt''wb') as f:
            for 
line in self.result:
                
f.write(line)
    
def process_message(self):
        if 
not self.method_name:
            
self.method_name self.pattern[self.pattern.find('(')]
        
message '{}('.format(self.method_name)
        for 
i in self.tokens:
            
message '{}{},'.format(messagei)
        
message '{}'.format(message[0:-1])
        
message '{})\n'.format(message)
        
self.result.append(message)
        print 
self.result
    def catch_new_tokens
(self):
        
tmp self.pattern
        arr_tokens 
tmp[tmp.find('(') + tmp.find(')')].split(',')
        for 
token in arr_tokens:
            if 
self.is_int(token):
                
self.tokens.append(token)
    
def is_int(selfentry):
        try: 
            
int(entry)
            return 
True
        except ValueError
:
            return 
False
class IncognitoOldVersion:
    
def __init__(self):
        
pass
    def set_file
(selfincognito_file):
        
self.file incognito_file
    def set_pattern
(selfpattern):
        
self.pattern pattern 
Modo de uso:
PHP код:
def main():
    
STREAMER_OBJECT_SD 10 #Valor que vocк irб utilizar por padrгo em todos os objetos convertidos
    
STREAMER_OBJECT_DD 10 #Valor que vocк irб utilizar por padrгo em todos os objetos convertidos
    
OBJECTS_FILE_REF 'nome.txt' #Path do arquivo que contйm todos os objetos que vocк deseja converter
    
conversor IncognitoConverter('CreateDynamicObject(id, x, y, z, rx, ry, rz, -1, -1, -1, {}, {})'.format(STREAMER_OBJECT_SDSTREAMER_OBJECT_DD))
    
old_version IncognitoOldVersion()
    
old_version.set_file(OBJECTS_FILE_REF)
    
old_version.set_pattern('CreateDynamicObject(id, x, y, z, rx, ry, rz)')
    
conversor.cast_process(old_version)
    print 
'Objeto convertido com sucesso!'
main() 
Pode jogar tudo no mesmo arquivo, nomea-lo main.py e mandar executar via linha de comando:
Код:
python main.py
O terminal precisa estar no path do arquivo.
Utilizei python 2.7 para o script.

basta vocк mudar o caminho do arquivo aonde tem:
Код:
OBJECTS_FILE_REF = 'nome.txt' #Path do arquivo que contйm todos os objetos que vocк deseja converter
Para o arquivo de texto do qual contйm os objetos criados pelo Streamer do Incognito na versгo antiga, use 1 linha por objeto, para que o leitor do IncognitoConversor possa identificar o mйtodo e os tokens utilizados.


A ideia de utilizar duas classes representando o objeto antigo e o conversor, й para se caso vocк quiser implementar algo mais complexo, que seja capaz de converter qualquer tipo de objeto antigo para um objeto novo, utilizando a ideia de anбlise lйxica dos tokens inseridos nos 'patterns' de cada objeto.



Qualquer duvida sobre, pode perguntar tambйm que explico melhor a ideia.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)