From 5bdedeecea69a5892e3ce8854e85f78537cf7ca4 Mon Sep 17 00:00:00 2001 From: fusion32 Date: Sun, 15 Jun 2025 22:25:12 -0300 Subject: channel functions --- reference/game.c | 807 ------------------------------------------------------- 1 file changed, 807 deletions(-) (limited to 'reference') diff --git a/reference/game.c b/reference/game.c index 5fd4ee7..6b71785 100644 --- a/reference/game.c +++ b/reference/game.c @@ -18375,813 +18375,6 @@ void __static_initialization_and_destruction_0(int __initialize_p,int __priority return; } -// WARNING: Unknown calling convention -- yet parameter storage is locked - -int GetNumberOfChannels(void) - -{ - return Channels; -} - - - -bool ChannelActive(int ChannelID) - -{ - TChannel *pTVar1; - bool bVar2; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar2 = false; - } - else { - bVar2 = true; - if (7 < ChannelID) { - pTVar1 = vector::operator()(&Channel,ChannelID); - bVar2 = pTVar1->Moderator != 0; - } - } - return bVar2; -} - - - -bool ChannelAvailable(int ChannelID,ulong CharacterID) - -{ - TPlayer *pl; - TPlayer *pTVar1; - TChannel *pTVar2; - ulong *puVar3; - int i; - TChannel *C; - bool bVar4; - RIGHT Right; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar4 = false; - } - else { - bVar4 = true; - if (7 < ChannelID) { - pTVar2 = vector::operator()(&Channel,ChannelID); - bVar4 = pTVar2->Moderator != 0; - } - } - if (!bVar4) { - return false; - } - pTVar1 = GetPlayer(CharacterID); - if (pTVar1 == (TPlayer *)0x0) { - error("ChannelAvailable: Spieler existiert nicht.\n"); - return false; - } - switch(ChannelID) { - case 0: - return pTVar1->Guild[0] != '\0'; - case 1: - case 3: - Right = READ_GAMEMASTER_CHANNEL; - break; - case 2: - Right = READ_TUTOR_CHANNEL; - break; - case 4: - case 5: - case 6: - case 7: - return true; - default: - if (ChannelID < 8) { - return false; - } - pTVar2 = vector::operator()(&Channel,ChannelID); - if (CharacterID == pTVar2->Moderator) { - return true; - } - i = 0; - if (pTVar2->InvitedPlayers < 1) { - return false; - } - do { - puVar3 = vector<>::operator()(&pTVar2->InvitedPlayer,i); - if (CharacterID == *puVar3) { - return true; - } - i = i + 1; - } while (i < pTVar2->InvitedPlayers); - return false; - } - bVar4 = CheckRight(CharacterID,Right); - return bVar4; -} - - - -char * GetChannelName(int ChannelID,ulong CharacterID) - -{ - TPlayer *pTVar1; - TChannel *pTVar2; - char *pcVar3; - bool bVar4; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar4 = false; - } - else { - bVar4 = true; - if (7 < ChannelID) { - pTVar2 = vector::operator()(&Channel,ChannelID); - bVar4 = pTVar2->Moderator != 0; - } - } - if (!bVar4) { - return "Unknown"; - } - pTVar1 = GetPlayer(CharacterID); - if (pTVar1 == (TPlayer *)0x0) { - error("GetChannelName: Spieler existiert nicht.\n"); -LAB_080999fd: - pcVar3 = "Unknown"; - } - else { - switch(ChannelID) { - case 0: - pcVar3 = pTVar1->Guild; - break; - case 1: - pcVar3 = "Gamemaster"; - break; - case 2: - pcVar3 = "Tutor"; - break; - case 3: - pcVar3 = "Rule Violations"; - break; - case 4: - pcVar3 = "Game-Chat"; - break; - case 5: - pcVar3 = "Trade"; - break; - case 6: - pcVar3 = "RL-Chat"; - break; - case 7: - pcVar3 = "Help"; - break; - default: - if (7 < ChannelID) { - pTVar2 = vector::operator()(&Channel,ChannelID); - sprintf(GetChannelName::ChannelName,"%s\'s Channel",pTVar2->ModeratorName); - return GetChannelName::ChannelName; - } - error("GetChannelName: Unbenutzter Kanal %d.\n",ChannelID); - goto LAB_080999fd; - } - } - return pcVar3; -} - - - -bool ChannelSubscribed(int ChannelID,ulong CharacterID) - -{ - TChannel *pTVar1; - ulong *puVar2; - int i; - TChannel *C; - bool bVar3; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar3 = false; - } - else { - bVar3 = true; - if (7 < ChannelID) { - pTVar1 = vector::operator()(&Channel,ChannelID); - bVar3 = pTVar1->Moderator != 0; - } - } - if (bVar3) { - i = 0; - pTVar1 = vector::operator()(&Channel,ChannelID); - if (0 < pTVar1->Subscribers) { - do { - puVar2 = vector<>::operator()(&pTVar1->Subscriber,i); - if (CharacterID == *puVar2) { - return true; - } - i = i + 1; - } while (i < pTVar1->Subscribers); - } - } - return false; -} - - - -ulong GetFirstSubscriber(int ChannelID) - -{ - int i; - TChannel *pTVar1; - ulong *puVar2; - TChannel *C; - ulong uVar3; - bool bVar4; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar4 = false; - } - else { - bVar4 = true; - if (7 < ChannelID) { - pTVar1 = vector::operator()(&Channel,ChannelID); - bVar4 = pTVar1->Moderator != 0; - } - } - uVar3 = 0; - if (bVar4) { - CurrentChannelID = ChannelID; - CurrentSubscriberNumber = 0; - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar4 = false; - } - else { - bVar4 = true; - if (7 < ChannelID) { - pTVar1 = vector::operator()(&Channel,ChannelID); - bVar4 = pTVar1->Moderator != 0; - } - } - uVar3 = 0; - if (bVar4) { - pTVar1 = vector::operator()(&Channel,CurrentChannelID); - i = CurrentSubscriberNumber; - if (CurrentSubscriberNumber < pTVar1->Subscribers) { - CurrentSubscriberNumber = CurrentSubscriberNumber + 1; - puVar2 = vector<>::operator()(&pTVar1->Subscriber,i); - uVar3 = *puVar2; - } - else { - uVar3 = 0; - } - } - } - return uVar3; -} - - - -// WARNING: Unknown calling convention -- yet parameter storage is locked - -ulong GetNextSubscriber(void) - -{ - int i; - TChannel *pTVar1; - ulong *puVar2; - TChannel *C; - ulong uVar3; - bool bVar4; - - if ((CurrentChannelID < 0) || (Channels <= CurrentChannelID)) { - error(&DAT_080ffea0,CurrentChannelID); - bVar4 = false; - } - else { - bVar4 = true; - if (7 < CurrentChannelID) { - pTVar1 = vector::operator()(&Channel,CurrentChannelID); - bVar4 = pTVar1->Moderator != 0; - } - } - uVar3 = 0; - if (bVar4) { - pTVar1 = vector::operator()(&Channel,CurrentChannelID); - i = CurrentSubscriberNumber; - if (CurrentSubscriberNumber < pTVar1->Subscribers) { - CurrentSubscriberNumber = CurrentSubscriberNumber + 1; - puVar2 = vector<>::operator()(&pTVar1->Subscriber,i); - uVar3 = *puVar2; - } - else { - uVar3 = 0; - } - } - return uVar3; -} - - - -bool MayOpenChannel(ulong CharacterID) - -{ - bool bVar1; - TChannel *pTVar2; - bool bVar3; - int i; - int i_00; - - if (Channels < 0xffff) { - bVar1 = CheckRight(CharacterID,PREMIUM_ACCOUNT); - bVar3 = false; - if (bVar1) { - i_00 = 8; - if (8 < Channels) { - do { - pTVar2 = vector::operator()(&Channel,i_00); - if (pTVar2->Moderator == CharacterID) goto LAB_08099cfb; - i_00 = i_00 + 1; - } while (i_00 < Channels); - } - bVar3 = true; - } - } - else { -LAB_08099cfb: - bVar3 = false; - } - return bVar3; -} - - - -// WARNING: Variable defined which should be unmapped: pl - -void OpenChannel(ulong CharacterID) - -{ - bool bVar1; - TPlayer *pTVar2; - TChannel *pTVar3; - ulong *puVar4; - undefined4 *puVar5; - int ChannelID; - int i; - TChannel *C; - int i_00; - TPlayer *pl; - - // try { // try from 08099d75 to 08099ef2 has its CatchHandler @ 08099ef5 - pTVar2 = GetPlayer(CharacterID); - if (pTVar2 == (TPlayer *)0x0) { - error("OpenChannel: Kreatur %lu existiert nicht.\n",CharacterID); - } - else { - if (Channels < 0xffff) { - bVar1 = CheckRight(CharacterID,PREMIUM_ACCOUNT); - if (bVar1) { - i = 8; - if (8 < Channels) { - do { - pTVar3 = vector::operator()(&Channel,i); - if (pTVar3->Moderator == CharacterID) goto LAB_08099e20; - i = i + 1; - } while (i < Channels); - } - i_00 = 8; - i = Channels; - if (8 < Channels) { - do { - pTVar3 = vector::operator()(&Channel,i_00); - if (pTVar3->Moderator == 0) { - i = i_00; - } - i_00 = i_00 + 1; - } while (i_00 < Channels); - } - if (i == Channels) { - Channels = i + 1; - } - pTVar3 = vector::operator()(&Channel,i); - pTVar3->Moderator = CharacterID; - strcpy(pTVar3->ModeratorName,(pTVar2->super_TCreature).Name); - puVar4 = vector<>::operator()(&pTVar3->Subscriber,0); - *puVar4 = CharacterID; - pTVar3->Subscribers = 1; - pTVar3->InvitedPlayers = 0; -LAB_08099e20: - SendOpenOwnChannel((pTVar2->super_TCreature).Connection,i); - return; - } - puVar5 = (undefined4 *)__cxa_allocate_exception(4); - *puVar5 = 0x33; - goto LAB_08099eab; - } - error(&DAT_081009a0); - } - puVar5 = (undefined4 *)__cxa_allocate_exception(4); - *puVar5 = 0xffffffff; -LAB_08099eab: - // WARNING: Subroutine does not return - __cxa_throw(puVar5,&RESULT::typeinfo,0); -} - - - -void CloseChannel(int ChannelID) - -{ - TChannel *pTVar1; - - if ((ChannelID < 8) || (Channels <= ChannelID)) { - error(&DAT_08100a00,ChannelID); - } - else { - pTVar1 = vector::operator()(&Channel,ChannelID); - if (pTVar1->Moderator == 0) { - error("CloseChannel: Kanal ist schon geschlossen.\n"); - return; - } - pTVar1->Moderator = 0; - } - return; -} - - - -// WARNING: Variable defined which should be unmapped: Opp - -void InviteToChannel(ulong CharacterID,char *Name) - -{ - bool bVar1; - TPlayer *pTVar2; - int iVar3; - ulong *puVar4; - undefined4 *puVar5; - TChannel *pTVar6; - char *pcVar7; - ulong OppID; - TChannel *pTVar8; - ulong uVar9; - TPlayer *pl; - int local_20; - int i_1; - TChannel *C; - int channel; - TPlayer *Opp; - - // try { // try from 08099f85 to 0809a218 has its CatchHandler @ 0809a220 - pTVar2 = GetPlayer(CharacterID); - if (pTVar2 == (TPlayer *)0x0) { - error("InviteToChannel: Kreatur %lu existiert nicht.\n",CharacterID); - return; - } - C = (TChannel *)0xffffffff; - pTVar8 = (TChannel *)0x8; - if (8 < Channels) { - do { - pTVar6 = vector::operator()(&Channel,(int)pTVar8); - if (pTVar6->Moderator == CharacterID) { - C = pTVar8; - } - pTVar8 = (TChannel *)((int)&pTVar8->Moderator + 1); - } while ((int)pTVar8 < Channels); - } - if (C == (TChannel *)0xffffffff) { - return; - } - uVar9 = 0; - channel = 0; - bVar1 = CheckRight((pTVar2->super_TCreature).ID,READ_GAMEMASTER_CHANNEL); - iVar3 = IdentifyPlayer(Name,false,!bVar1,(TPlayer **)&channel); - if (iVar3 == -1) { - uVar9 = GetCharacterID(Name); - if (uVar9 == 0) { - puVar5 = (undefined4 *)__cxa_allocate_exception(4); - *puVar5 = 0x1a; -LAB_0809a19d: - // WARNING: Subroutine does not return - __cxa_throw(puVar5,&RESULT::typeinfo,0); - } - } - else { - if (-1 < iVar3) { - if (iVar3 == 0) { - uVar9 = *(ulong *)(channel + 0x208); - Name = (char *)(channel + 0x214); - } - goto LAB_0809a01f; - } - if (iVar3 != -2) goto LAB_0809a01f; - uVar9 = GetCharacterID(Name); - if (uVar9 == 0) { - puVar5 = (undefined4 *)__cxa_allocate_exception(4); - *puVar5 = 0x1c; - goto LAB_0809a19d; - } - } - Name = GetCharacterName(Name); -LAB_0809a01f: - print(); - pTVar8 = vector::operator()(&Channel,(int)C); - if (CharacterID != uVar9) { - local_20 = 0; - iVar3 = pTVar8->InvitedPlayers; - if (0 < iVar3) { - do { - puVar4 = vector<>::operator()(&pTVar8->InvitedPlayer,local_20); - if (*puVar4 == uVar9) { - SendMessage((pTVar2->super_TCreature).Connection,0x16, - "%s has already been invited.",Name); - return; - } - local_20 = local_20 + 1; - iVar3 = pTVar8->InvitedPlayers; - } while (local_20 < iVar3); - } - puVar4 = vector<>::operator()(&pTVar8->InvitedPlayer,iVar3); - *puVar4 = uVar9; - pTVar8->InvitedPlayers = pTVar8->InvitedPlayers + 1; - SendMessage((pTVar2->super_TCreature).Connection,0x16,"%s has been invited.",Name); - if (channel != 0) { - pcVar7 = "his"; - if ((pTVar2->super_TCreature).Sex != 1) { - pcVar7 = "her"; - } - SendMessage(*(TConnection **)(channel + 0x318),0x16, - "%s invites you to %s private chat channel.",(pTVar2->super_TCreature).Name, - pcVar7); - } - } - return; -} - - - -// WARNING: Variable defined which should be unmapped: Opp - -void ExcludeFromChannel(ulong CharacterID,char *Name) - -{ - bool bVar1; - TPlayer *pTVar2; - int iVar3; - ulong *puVar4; - ulong *puVar5; - undefined4 *puVar6; - TChannel *pTVar7; - ulong OppID; - TChannel *pTVar8; - ulong CharacterID_00; - int i; - int local_24; - int Position; - TChannel *C; - int channel; - TPlayer *pl; - TPlayer *Opp; - - // try { // try from 0809a258 to 0809a4fe has its CatchHandler @ 0809a504 - pTVar2 = GetPlayer(CharacterID); - if (pTVar2 == (TPlayer *)0x0) { - error("ExcludeFromChannel: Kreatur %lu existiert nicht.\n",CharacterID); - } - else { - C = (TChannel *)0xffffffff; - pTVar8 = (TChannel *)0x8; - if (8 < Channels) { - do { - pTVar7 = vector::operator()(&Channel,(int)pTVar8); - if (pTVar7->Moderator == CharacterID) { - C = pTVar8; - } - pTVar8 = (TChannel *)((int)&pTVar8->Moderator + 1); - } while ((int)pTVar8 < Channels); - } - if (C != (TChannel *)0xffffffff) { - CharacterID_00 = 0; - pl = (TPlayer *)0x0; - bVar1 = CheckRight((pTVar2->super_TCreature).ID,READ_GAMEMASTER_CHANNEL); - iVar3 = IdentifyPlayer(Name,false,!bVar1,&pl); - if (iVar3 == -1) { - CharacterID_00 = GetCharacterID(Name); - if (CharacterID_00 == 0) { - puVar6 = (undefined4 *)__cxa_allocate_exception(4); - *puVar6 = 0x1a; -LAB_0809a484: - // WARNING: Subroutine does not return - __cxa_throw(puVar6,&RESULT::typeinfo,0); - } - } - else if (iVar3 < 0) { - if ((iVar3 == -2) && (CharacterID_00 = GetCharacterID(Name), CharacterID_00 == 0)) { - puVar6 = (undefined4 *)__cxa_allocate_exception(4); - *puVar6 = 0x1c; - goto LAB_0809a484; - } - } - else if (iVar3 == 0) { - CharacterID_00 = (pl->super_TCreature).ID; - Name = (pl->super_TCreature).Name; - } - print(); - pTVar8 = vector::operator()(&Channel,(int)C); - if (CharacterID != CharacterID_00) { - local_24 = -1; - iVar3 = pTVar8->InvitedPlayers; - i = 0; - if (0 < iVar3) { - do { - puVar4 = vector<>::operator()(&pTVar8->InvitedPlayer,i); - if (*puVar4 == CharacterID_00) { - local_24 = i; - } - i = i + 1; - iVar3 = pTVar8->InvitedPlayers; - } while (i < iVar3); - } - if (local_24 == -1) { - SendMessage((pTVar2->super_TCreature).Connection,0x16,"%s has not been invited." - ,Name); - } - else { - pTVar8->InvitedPlayers = iVar3 + -1; - puVar4 = vector<>::operator()(&pTVar8->InvitedPlayer,local_24); - puVar5 = vector<>::operator()(&pTVar8->InvitedPlayer,pTVar8->InvitedPlayers); - *puVar4 = *puVar5; - SendMessage((pTVar2->super_TCreature).Connection,0x16,"%s has been excluded.", - Name); - bVar1 = ChannelSubscribed((int)C,CharacterID_00); - if (bVar1) { - LeaveChannel((int)C,CharacterID_00,false); - SendCloseChannel((pl->super_TCreature).Connection,(int)C); - } - } - } - } - } - return; -} - - - -bool JoinChannel(int ChannelID,ulong CharacterID) - -{ - bool bVar1; - TChannel *pTVar2; - ulong *puVar3; - undefined4 *puVar4; - TChannel *C; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - // try { // try from 0809a550 to 0809a61d has its CatchHandler @ 0809a630 - error(&DAT_080ffea0,ChannelID); - bVar1 = false; - } - else { - bVar1 = true; - if (7 < ChannelID) { - pTVar2 = vector::operator()(&Channel,ChannelID); - bVar1 = pTVar2->Moderator != 0; - } - } - if (bVar1) { - bVar1 = ChannelAvailable(ChannelID,CharacterID); - if (bVar1) { - pTVar2 = vector::operator()(&Channel,ChannelID); - bVar1 = ChannelSubscribed(ChannelID,CharacterID); - if (!bVar1) { - puVar3 = vector<>::operator()(&pTVar2->Subscriber,pTVar2->Subscribers); - *puVar3 = CharacterID; - pTVar2->Subscribers = pTVar2->Subscribers + 1; - } - return CharacterID == pTVar2->Moderator; - } - puVar4 = (undefined4 *)__cxa_allocate_exception(4); - *puVar4 = 1; - } - else { - puVar4 = (undefined4 *)__cxa_allocate_exception(4); - *puVar4 = 0xffffffff; - } - // WARNING: Subroutine does not return - __cxa_throw(puVar4,&RESULT::typeinfo,0); -} - - - -// WARNING: Variable defined which should be unmapped: CharacterID_local - -void LeaveChannel(int ChannelID,ulong CharacterID,bool Close) - -{ - vector<> *this; - TChannel *C_1; - TChannel *pTVar1; - ulong *puVar2; - TPlayer *pTVar3; - ulong *puVar4; - int i; - int iVar5; - TChannel *C; - bool bVar6; - bool Close_local; - ulong CharacterID_local; - - if ((ChannelID < 0) || (Channels <= ChannelID)) { - error(&DAT_080ffea0,ChannelID); - bVar6 = false; - } - else { - bVar6 = true; - if (7 < ChannelID) { - pTVar1 = vector::operator()(&Channel,ChannelID); - bVar6 = pTVar1->Moderator != 0; - } - } - if (bVar6) { - iVar5 = 0; - pTVar1 = vector::operator()(&Channel,ChannelID); - if (0 < pTVar1->Subscribers) { - this = &pTVar1->Subscriber; - do { - puVar2 = vector<>::operator()(this,iVar5); - if (CharacterID == *puVar2) { - pTVar1->Subscribers = pTVar1->Subscribers + -1; - puVar2 = vector<>::operator()(this,iVar5); - puVar4 = vector<>::operator()(this,pTVar1->Subscribers); - *puVar2 = *puVar4; - break; - } - iVar5 = iVar5 + 1; - } while (iVar5 < pTVar1->Subscribers); - } - if ((Close) && (CharacterID == pTVar1->Moderator)) { - iVar5 = 0; - if (0 < pTVar1->Subscribers) { - do { - puVar2 = vector<>::operator()(&pTVar1->Subscriber,iVar5); - pTVar3 = GetPlayer(*puVar2); - if (pTVar3 != (TPlayer *)0x0) { - SendCloseChannel((pTVar3->super_TCreature).Connection,ChannelID); - } - iVar5 = iVar5 + 1; - } while (iVar5 < pTVar1->Subscribers); - } - pTVar1->Subscribers = 0; - } - if ((7 < ChannelID) && (pTVar1->Subscribers == 0)) { - if (Channels <= ChannelID) { - error(&DAT_08100a00); - return; - } - pTVar1 = vector::operator()(&Channel,ChannelID); - if (pTVar1->Moderator == 0) { - error("CloseChannel: Kanal ist schon geschlossen.\n"); - return; - } - pTVar1->Moderator = 0; - } - } - return; -} - - - -void LeaveAllChannels(ulong CharacterID) - -{ - TChannel *pTVar1; - int ChannelID; - int i; - bool bVar2; - - i = 0; - if (0 < Channels) { - do { - if ((i < 0) || (Channels <= i)) { - error(&DAT_080ffea0,i); - bVar2 = false; - } - else { - bVar2 = true; - if (7 < i) { - pTVar1 = vector::operator()(&Channel,i); - bVar2 = pTVar1->Moderator != 0; - } - } - if (bVar2) { - LeaveChannel(i,CharacterID,false); - } - i = i + 1; - } while (i < Channels); - } - return; -} - TParty * GetParty(ulong Leader) { -- cgit v1.2.3