Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Development] Server Mu Online Season 6.3

Joined
Oct 29, 2007
Messages
1,289
Reaction score
1,308
These source codes don't work, the community is in total decay.. increasingly knowledgeable people who are fully devoted to the development of MU Online there, I think at this point it is correct to say that: "Communities of development for Mu Online "and" Mu Online same, have died."

PS: Sad but true.
 
Junior Spellweaver
Joined
Mar 5, 2009
Messages
171
Reaction score
71
These source codes don't work, the community is in total decay.. increasingly knowledgeable people who are fully devoted to the development of MU Online there, I think at this point it is correct to say that: "Communities of development for Mu Online "and" Mu Online same, have died."

PS: Sad but true.

Cause you can't do anything by yourself doesn't mean other people can't
 
Joined
Oct 29, 2007
Messages
1,289
Reaction score
1,308
Cause you can't do anything by yourself doesn't mean other people can't

I can do many things by myself.. since I learned some concepts of C++, and I got into the coding server side too, so here your comment is very out of place.

PS: I've seen his work in: WzTeam Season 4.6 (source code) of that and a lot of what you wear on your fantastic code is made by other persons (95% of your "code work" is stolen from Rz true MU Coders), so here you're not the one to come and tell me that I do not I can encode by myself. :eek:tt1:

Spanish:

PD: He visto tu trabajo en los archivos de: WzTeam Season 4.6 (tengo tus codigos fuente), y lo único que veo en tu "fantástico código", son cosas hechas por otras personas (el 95% de tu supuesto trabajo con ese código, es robado de trabajos anteriores con el GameServer 1.00.87 desarrollado por los verdaderos codificadores de RaGEZONE), entonces yo pienso que no sos la persona indicada, para venir a plantearme que yo no puedo hacer algo por mi mismo, porque por lo visto estarías siendo un Hipócrita.

PD 2: Tu fabuloso: "Gestor de Eventos", es basura solamente un montón de lineas de código (facil de entender hasta para mi, que soy Novato), y que por la forma en la que esta programado, aun sin haberlo testeado. se nota que tiene muchos bugs, o mas bien que los genera al gameserver. y vos venís a decirme a mi, que yo no puedo hacer cosas por mi mismo? EPIC FAILLLL!!! xD

para los que no me crean... porque mejor no lo ven con sus propios ojos, este es dichoso Gestor de Eventos, del señor: Josep (es una mierda):

Code:
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "stdafx.h"
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "ChaosEvent.h"
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "log.h"
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "gameserver.h"
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "Readscript.h"


CChaosEvent g_ChaosEvent;


typedef void (*TAllSendServerMsg)(char* msg);
typedef void (*TgObjMonsterDieGiveItem)(OBJECTSTRUCT *lpObj, OBJECTSTRUCT *lpTargetObj);
typedef short (*TgObjAddMonster)(int MapID);
typedef BOOL (*TgObjSetMonster)(int aIndex, int MonsterClass);


TAllSendServerMsg AllSendServerMsg = (TAllSendServerMsg)(0x004041D3);
TgObjMonsterDieGiveItem gObjMonsterDieGiveItem = (TgObjMonsterDieGiveItem)(0x0041D9E0);
TgObjAddMonster gObjAddMonster = (TgObjAddMonster)(0x004044F3);
TgObjSetMonster gObjSetMonster = (TgObjSetMonster)(0x0040616D);


CChaosEvent::CChaosEvent() : m_bInstantSpawn(false), m_bEnableEvent(false)
{
    InitializeCriticalSection(&m_critical);


    ZeroMemory(eventArray,8000); 
}


CChaosEvent::~CChaosEvent()
{
    DeleteCriticalSection(&m_critical);
}


void CChaosEvent::Load()
{
    EnterCriticalSection(&m_critical);
    //Poner funcion para limpiar bichos existentes
    Clear();


    SMDFile = fopen("..\\Data\\WZTGroup_EMUEvents.dat", "r");


    if(SMDFile == NULL) 
    {
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=if"]#if[/URL]  0
        MsgBox("[Chaos Event]Cannot load settings file\nAutomatic disable event");
[URL="http://forum.ragezone.com/usertag.php?do=list&action=hash&hash=endif"]#endif[/URL] 


        m_bEnableEvent = false;


        return;
    }


    SMDToken Token;


    int iType = -1;


    SPAWN_INFO SpawnInfo;
    MONSTER_INFO MonsterInfo;
    ITEM_INFO ItemInfo;


    while(true)
    {
        Token = GetToken();


        if(Token == END)
            break;


        iType = TokenNumber;


        while(true)
        {
            if(iType == 0)
            {
                Token = GetToken();


                if(Token == NAME && strcmp("end",TokenString) == 0)
                    break;


                this->m_bEnableEvent = TokenNumber;


                if(this->m_bEnableEvent == false)
                    break;


                Token = GetToken();


                this->m_bInstantSpawn = TokenNumber;
            }
            else if(iType == 1)
            {
                Token = GetToken();


                if(Token == NAME && strcmp("end",TokenString) == 0)
                    break;


                SpawnInfo.iCategory = TokenNumber;


                Token = GetToken();
                SpawnInfo.bStaticTime = TokenNumber;


                SpawnInfo.wDay = 0;
                
                Token = GetToken();
                SpawnInfo.iHour = TokenNumber;


                Token = GetToken();
                SpawnInfo.iMinute = TokenNumber;


                Token = GetToken();
                SpawnInfo.bMessage = TokenNumber;


                Token = GetToken();


                if(Token == NAME)
                    strcpy(SpawnInfo.szMessage, TokenString);


                if(this->m_bInstantSpawn == false)
                {
                    SpawnInfo.dwLastTick = GetTickCount();
                }
                else
                {
                    SpawnInfo.dwLastTick = 0;
                }


                this->m_Spawns.push_back(SpawnInfo);
            }
            else if(iType == 2)
            {
                Token = GetToken();


                if(Token == NAME && strcmp("end",TokenString) == 0)
                    break;


                MonsterInfo.iCategory = TokenNumber;


                Token = GetToken();
                MonsterInfo.iDropCategory = TokenNumber;


                Token = GetToken();
                MonsterInfo.iMonsterID = TokenNumber;


                Token = GetToken();
                MonsterInfo.iMapID = TokenNumber;


                Token = GetToken();
                MonsterInfo.iX1 = TokenNumber;


                Token = GetToken();
                MonsterInfo.iY1 = TokenNumber;


                Token = GetToken();
                MonsterInfo.iX2 = TokenNumber;


                Token = GetToken();
                MonsterInfo.iY2 = TokenNumber;


                Token = GetToken();
                MonsterInfo.iAddHP = TokenNumber;


                Token = GetToken();
                MonsterInfo.iAddDefense = TokenNumber;


                Token = GetToken();
                MonsterInfo.iAddAttack = TokenNumber;


                Token = GetToken();
                MonsterInfo.iDropRate = TokenNumber;


                Token = GetToken();
                MonsterInfo.iExcRate = TokenNumber;


                Token = GetToken();
                MonsterInfo.iAncRate = TokenNumber;


                Token = GetToken();
                MonsterInfo.iSpawnCount = TokenNumber;


                Token = GetToken();
                MonsterInfo.bShowMessage = TokenNumber;


                Token = GetToken();


                if(Token == NAME)
                    strcpy(MonsterInfo.szMessage,TokenString);


                MonsterInfo.iCurSpawnCount = 0;


                this->m_Monsters[MonsterInfo.iCategory].push_back(MonsterInfo);
            }
            else if(iType == 3)
            {
                Token = GetToken();


                if(Token == NAME && strcmp("end",TokenString) == 0)
                    break;


                ItemInfo.iCategory = TokenNumber;


                Token = GetToken();
                ItemInfo.iItemType = TokenNumber;


                Token = GetToken();
                ItemInfo.iItemType = ITEMGET(ItemInfo.iItemType,TokenNumber);


                Token = GetToken();
                ItemInfo.iLevel = TokenNumber;


                Token = GetToken();
                ItemInfo.bSkill = TokenNumber;


                Token = GetToken();
                ItemInfo.bLuck = TokenNumber;


                Token = GetToken();
                ItemInfo.iOption = TokenNumber;


                Token = GetToken();
                ItemInfo.iExcellent = TokenNumber;


                Token = GetToken();
                ItemInfo.bAncient = TokenNumber;


                this->m_ItemInfo[ItemInfo.iCategory].push_back(ItemInfo);
            }
        }
    };


    fclose(SMDFile);


    //if(m_bEnableEvent == true)
    //    Log.outInfo("[Chaos Event]Running Event Spawns(%d)", this->m_Spawns.size());


    LeaveCriticalSection(&m_critical);
}


void CChaosEvent::Process()
{
    EnterCriticalSection(&m_critical);


    if(this->m_bEnableEvent == false)
    {
        LeaveCriticalSection(&m_critical);
        return;
    }


    DWORD dwTickCount = GetTickCount();


    for(LIST_SPAWN::iterator it = m_Spawns.begin();it != m_Spawns.end();it++)
    {
        LPSPAWN_INFO lpSpawnInfo = &(*it);


        bool bRun = false;


        SYSTEMTIME sysTime;


        GetLocalTime(&sysTime);


        if(lpSpawnInfo->bStaticTime == false)
        {
            bRun = ((dwTickCount - lpSpawnInfo->dwLastTick) > ((lpSpawnInfo->iHour*60)+(lpSpawnInfo->iMinute))*60*1000);
        }
        else
        {
            bRun = (sysTime.wHour == lpSpawnInfo->iHour && sysTime.wMinute == lpSpawnInfo->iMinute && sysTime.wDay != lpSpawnInfo->wDay);
        }


        if(bRun == true)
        {
            if(lpSpawnInfo->bStaticTime == true)
                lpSpawnInfo->wDay = sysTime.wDay;
            else
                lpSpawnInfo->dwLastTick = dwTickCount;


            for(LIST_MONSTER::iterator it = m_Monsters[lpSpawnInfo->iCategory].begin();it != m_Monsters[lpSpawnInfo->iCategory].end();it++)
            {
                LPMONSTER_INFO lpMonsterInfo = &(*it);


                if(lpMonsterInfo->iCategory == lpSpawnInfo->iCategory)
                {
                    while(lpMonsterInfo->iCurSpawnCount++ < lpMonsterInfo->iSpawnCount)
                        this->AddMonster(lpMonsterInfo);
                }
            }


            if(lpSpawnInfo->bMessage == true)
            {
                AllSendServerMsg(lpSpawnInfo->szMessage);
            }
        }
    }
    LeaveCriticalSection(&m_critical);
}


void CChaosEvent::KillProcess(OBJECTSTRUCT *lpObj, OBJECTSTRUCT *lpTargetObj)
{
    if(eventArray[lpObj->m_Index] == false)
    {
        gObjMonsterDieGiveItem(lpObj,lpTargetObj);
        return;
    }


    EnterCriticalSection(&m_critical);


    MONSTER_MAP::iterator it = m_MonsterMap.find(lpObj->m_Index);


    if(it == m_MonsterMap.end())
    {
        LeaveCriticalSection(&m_critical);
        return;
    }


    DWORD dwIndex = gObjMonsterTopHitDamageUser((LPBYTE)lpObj);


    lpTargetObj = &ObjTab[dwIndex];


    LPMONSTER_INFO lpMonsterInfo = it->second;


    lpMonsterInfo->iCurSpawnCount--;


    if(lpMonsterInfo->bShowMessage == true)
    {
        char szMessage[256] = {0};


        sprintf(szMessage, lpMonsterInfo->szMessage, lpTargetObj->Name);


        AllSendServerMsg(szMessage);
    }


    if(m_ItemInfo[lpMonsterInfo->iDropCategory].size() > 0 && rand()%100 < lpMonsterInfo->iDropRate)
    {
        int iSel = rand()%m_ItemInfo[lpMonsterInfo->iDropCategory].size();


        LPITEM_INFO lpItemInfo = &m_ItemInfo[lpMonsterInfo->iDropCategory][iSel];


        int iNewOption = 0, iSetOption = 0;


        if(rand()%100 < lpMonsterInfo->iExcRate)
        {
            int iCount = rand()%(lpItemInfo->iExcellent+1);


            if(iCount > 6)
                iCount = 6;


            for(int i = 0;i < iCount;i++)
                iNewOption |= 1 << i;
        }


        if(rand()%100 < lpMonsterInfo->iAncRate && lpItemInfo->bAncient == true)
        {
            BOOL isSet = lpItemInfo->iItemType;


            _asm
            {
                push isSet;
                mov ecx,0x07AD9630;
                mov eax, 0x00405551;
                call eax;
                mov isSet, eax;
                sub esp,4;
            };


            if(isSet == TRUE)
            {
                _asm
                {
                    mov ecx,0x07AD9630;
                    mov eax, 0x00404291;
                    call eax;
                    mov iSetOption, eax;
                };
                //iSetOption = gSetItemOption.GenSetOption(lpItemInfo->iItemType);
                iNewOption = 0;
            }
        }


        ItemSerialCreateSend(dwIndex, lpObj->MapNumber, lpObj->X, lpObj->Y, lpItemInfo->iItemType, rand()%(lpItemInfo->iLevel+1), 255, lpItemInfo->bSkill, lpItemInfo->bLuck, rand()%(lpItemInfo->iOption+1), dwIndex, iNewOption, iSetOption);
    }


    eventArray[lpObj->m_Index] = false;
    gObjDel(lpObj->m_Index);
    m_MonsterMap.erase(it);


    LeaveCriticalSection(&m_critical);
}


void CChaosEvent::AddMonster(LPMONSTER_INFO lpMonsterInfo)
{
    int iIndex = gObjAddMonster(lpMonsterInfo->iMapID);


    if(iIndex == -1)
        return;


    OBJECTSTRUCT *lpObj = &ObjTab[iIndex];


    lpObj->MapNumber = lpMonsterInfo->iMapID;


    while(true)
    {
        int iPos;


        int X1 = lpMonsterInfo->iX1, X2 = lpMonsterInfo->iX2, Y1 = lpMonsterInfo->iY1, Y2 = lpMonsterInfo->iY2;


        BYTE MapNumber = lpObj->MapNumber;


        _asm
        {
            mov edx, lpObj;
            lea ecx, dword ptr ds:[edx+0x12E];
            push ecx;
            lea ecx, dword ptr ds:[edx+0x12C];
            push ecx;
            push Y2;
            push X2;
            push Y1;
            push X1;
            movzx eax, MapNumber;
            push eax;
            mov ecx, 0x07D800B0;
            mov eax, 0x0040768F;
            call eax;
            mov iPos, eax;
        };


        if(iPos != 0)
            break;
    };


    lpObj->TX = lpObj->X;
    lpObj->TY = lpObj->Y;
    lpObj->MTX = lpObj->X;
    lpObj->MTY = lpObj->Y;
    lpObj->StartX = lpObj->X;
    lpObj->StartY = lpObj->Y;
    lpObj->Dir = rand()%8;
    lpObj->m_State = 1;
    lpObj->PathCount = 0;


    gObjSetMonster(iIndex,lpMonsterInfo->iMonsterID);


    lpObj->Life = lpObj->MaxLife *= (1.0f+(lpMonsterInfo->iAddHP/100.0f));
    lpObj->m_AttackDamageMin *= ((100.0f+lpMonsterInfo->iAddAttack)/100.0f);
    lpObj->m_AttackDamageMax *= ((100.0f+lpMonsterInfo->iAddAttack)/100.0f);
    lpObj->m_Defense *= ((100.0f+lpMonsterInfo->iAddDefense)/100.0f);


    eventArray[iIndex] = true;


    m_MonsterMap.insert(std::make_pair(iIndex,lpMonsterInfo));
}


void CChaosEvent::Clear()
{
    m_Spawns.clear();
    m_MonsterMap.clear();


    for(int i = 0;i < MAX_CATEGORY;i++)
    {
        m_ItemInfo[i].clear();
        m_Monsters[i].clear();
    }


    for(MONSTER_MAP::iterator it = m_MonsterMap.begin();it != m_MonsterMap.end();it++)
    {
        gObjDel(it->first);
        eventArray[it->first] = false;
    }

}

PD 3: Yo programe el otro dia un: NPC Exchanger, para unos Files Season 3, que funciona perfectamente, que no genera bugs al gameserver, y solamente me tomo 5 min, hacerlo:

Code:
bool InitNPCTalk(int aIndex,int aTargetIndex){
	OBJECTSTRUCT* gObj = (OBJECTSTRUCT*)(aIndex * OBJECT_SIZE + OBJECT_BASE);
	OBJECTSTRUCT *gTargetObj = (OBJECTSTRUCT*) OBJECT_POINTER (aTargetIndex);

if(gTargetObj->Class == LUKE_THE_HELPER && gTargetObj->MapNumber == 0)	{
		if(DeleteItemFromPlayer(aIndex,ITEMGET(14,68),1) == 0)
		{
			GCServerMsgStringSend("You don't have the special item!",aIndex,1);
			return true;
		}
		else
		{
			int Type = ITEMGET(14,41);//Gemstone
			GCFireworkSend(aIndex,gObj->X,gObj->Y,1);
			ItemSerialCreateSend(aIndex,gObj->MapNumber,gObj->X,gObj->Y,Type,0,0,0,0,0,0,0,0);
			GCServerMsgStringSend("Thank you noble warrior.. You are worthy to receive the 'Gemstone'.",aIndex,1);
		}
	}
	return false;
}
 
Last edited:
Junior Spellweaver
Joined
Mar 5, 2009
Messages
171
Reaction score
71
EPIC FAIL.. im not josep from stupid wzteam... idiot...

Sos mas lento de lo que pensaba.. anda a hastle quizas ahi seas bueno muchachito..

PD: Espero que hayas usado el dialogo del Helper...
 
Joined
Oct 29, 2007
Messages
1,289
Reaction score
1,308
EPIC FAIL.. im not josep from stupid wzteam... idiot...

Sos mas lento de lo que pensaba.. anda a hastle quizas ahi seas bueno muchachito..

PD: Espero que hayas usado el dialogo del Helper...

Hahaha you say that you aren't Josep of wzteam??, you made me laugh... :laugh:

PD: y porque decis que esperas que halla usado el dialog del helper?, no entiendo que importa eso?, lo que use (por si no se nota en el código), es la función para mandar mensajes desde servidor...
el NPC es el del index: 258, que no tenia función alguna, por eso lo use.. si hubiera querido, podría haber agregado uno totalmente nuevo en el lado del servidor y también en el lado del cliente..
 
Junior Spellweaver
Joined
Mar 5, 2009
Messages
171
Reaction score
71
Hahaha you say that you aren't Josep of wzteam??, you made me laugh... :laugh:

PD: y porque decis que esperas que halla usado el dialog del helper?, no entiendo que importa eso?, lo que use (por si no se nota en el código), es la función para mandar mensajes desde servidor...
el NPC es el del index: 258, que no tenia función alguna, por eso lo use.. si hubiera querido, podría haber agregado uno totalmente nuevo en el lado del servidor y también en el lado del cliente..

Luke The Helper tiene un dialogo como el NPC de Santa Town con un Si / No que se utiliza para recibir un Item si no mal recuerdo bue eso no importa... lo importante es recalcar que no no soy el pelotudo de William o will no se que (gracias a dios ese pibe es peor que vos)... es tu problema si te sentiste ofendido...

Laugh all the day if you want.. im not josep... see my nick? joseSp ... my old account was lost.. so i create this one...
 
Joined
Oct 29, 2007
Messages
1,289
Reaction score
1,308
Luke The Helper tiene un dialogo como el NPC de Santa Town con un Si / No que se utiliza para recibir un Item si no mal recuerdo bue eso no importa... lo importante es recalcar que no no soy el pelotudo de William o will no se que (gracias a dios ese pibe es peor que vos)... es tu problema si te sentiste ofendido...

Laugh all the day if you want.. im not josep... see my nick? joseSp ... my old account was lost.. so i create this one...

Well, as you are no Josep of: wzteam, then I think it will not matter, that provides full source code of the latest revision of the files of: wzteam season 4.6 or not?

here WzTeam Season 4.6 Full Source for all:



and here WzTam Season 4.6 Server Files (Files base + configs):



PD: De esta forma, si sos Josep del wzteam, todos van a poder ver tu maravillosa forma de codificar. y sino, entonces no hay problema y todos felices (ami no me importa aportar este código, porque es horrible y ademas porque no es mio).
 
Last edited:
Junior Spellweaver
Joined
Mar 5, 2009
Messages
171
Reaction score
71
Well, as you are no Josep of: wzteam, then I think it will not matter, that provides full source code of the latest revision of the files of: wzteam season 4.6 or not?

here WzTeam Season 4.6 Full Source for all:



and here WzTam Season 4.6 Server Files (Files base + configs):



PD: De esta forma, si sos Josep del wzteam, todos van a poder ver tu maravillosa forma de codificar. y sino, entonces no hay problema y todos felices (ami no me importa aportar este código, porque es horrible y ademas porque no es mio).

Te repito no soy Josep.. xq insistis al p2 mijo?
 
Custom Title Activated
Loyal Member
Joined
Dec 5, 2009
Messages
2,657
Reaction score
1,178
Mauro so if i change name to Josefaprz ill be wzteam too? comone its thread about s6e3 not spanish drama.
 
Newbie Spellweaver
Joined
Dec 19, 2016
Messages
41
Reaction score
3
Who Honeycomb More files with this theme, upgrade Shortcuts please be kind! Thank you!
 
Back
Top