SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 03/12/2015, 01:03 AM   #1
Rodox_Mortein
Huge Clucker
 
Join Date: May 2011
Posts: 240
Reputation: 0
Question Novos Objetos Dynamicos

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);
Rodox_Mortein is offline   Reply With Quote
Old 03/12/2015, 08:52 PM   #2
WLSF
High-roller
 
Join Date: Aug 2011
Posts: 3,540
Reputation: 787
Default Re: Novos Objetos Dynamicos

Quote:
Originally Posted by Rodox_Mortein View Post
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 Code:
# -*- 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 Code:
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:
Code:
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:
Code:
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.
WLSF is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] Novos objetos no MTA EmanuelRamos Português/Portuguese 2 09/08/2015 03:12 PM
[Ajuda] Novos objetos MTA. Blackmapper Português/Portuguese 7 25/11/2014 02:41 PM
[Pedido] MTA Com Novos Objetos ProKillerpa Português/Portuguese 4 23/07/2013 12:04 AM
[Ajuda] Novos objetos MTA Guerek Português/Portuguese 0 29/07/2012 08:12 PM
[Ajuda] Novos Objetos chapa Português/Portuguese 1 24/10/2011 05:36 AM


All times are GMT. The time now is 03:29 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.