diff options
Diffstat (limited to 'reference/game.c')
| -rw-r--r-- | reference/game.c | 5733 |
1 files changed, 0 insertions, 5733 deletions
diff --git a/reference/game.c b/reference/game.c index 4b7b5b7..b6cd717 100644 --- a/reference/game.c +++ b/reference/game.c @@ -12110,5739 +12110,6 @@ void __static_initialization_and_destruction_0(int __initialize_p,int __priority return;
}
-
-
-// WARNING: Unknown calling convention -- yet parameter storage is locked
-
-Object GetEventObject(void)
-
-{
- Object OVar1;
- ulong *in_stack_00000004;
- undefined4 in_stack_00000008;
- ulong *in_stack_0000000c;
- ulong *in_stack_00000010;
- ulong *in_stack_00000014;
- ulong *in_stack_00000018;
-
- switch(in_stack_00000008) {
- case 1:
- in_stack_00000018 = in_stack_00000010;
- break;
- case 2:
- in_stack_00000018 = in_stack_00000014;
- break;
- case 3:
- in_stack_00000018 = in_stack_0000000c;
- break;
- case 4:
- break;
- default:
- error("GetEventObject: Unbekannte Nummer %d.\n");
- case 0:
- OVar1.ObjectID = NONE.ObjectID;
- goto LAB_08072475;
- }
- OVar1.ObjectID = *in_stack_00000018;
-LAB_08072475:
- *in_stack_00000004 = OVar1.ObjectID;
- return (Object)(ulong)in_stack_00000004;
-}
-
-
-
-bool Compare(int Value1,int Operator,int Value2)
-
-{
- bool bVar1;
-
- switch(Operator) {
- case 0x3c:
- bVar1 = Value1 < Value2;
- break;
- case 0x3d:
- bVar1 = Value1 == Value2;
- break;
- case 0x3e:
- bVar1 = Value2 < Value1;
- break;
- default:
- error(&DAT_080f79e0,Operator);
- bVar1 = false;
- break;
- case 0x47:
- bVar1 = Value2 <= Value1;
- break;
- case 0x4c:
- bVar1 = Value1 <= Value2;
- break;
- case 0x4e:
- bVar1 = Value1 != Value2;
- }
- return bVar1;
-}
-
-
-
-bool CheckCondition(EventType param_1,TMoveUseCondition *Condition,Object *User,Object *Obj1,
- Object *Obj2,Object *Temp)
-
-{
- ModifierType MVar1;
- FLAG Flag;
- TYPEATTRIBUTE Attribute;
- byte bVar2;
- char cVar3;
- bool bVar4;
- ushort HouseID;
- TCreature *pTVar5;
- char *__s2;
- char *__s1;
- int iVar6;
- int iVar7;
- ObjectType *pOVar8;
- TPlayer *pTVar9;
- ulong uVar10;
- ulong uVar11;
- long lVar12;
- Object *pOVar13;
- undefined4 uVar14;
- ulong *puVar15;
- ulong *puVar16;
- ulong *puVar17;
- bool local_a7;
- bool local_a6;
- bool local_a5;
- int iStack_a4;
- bool fulfilled;
- int x2;
- int y2;
- int z2;
- int x1;
- int y1;
- int z1;
- Object local_7c [4];
- ObjectType local_6c [4];
- ulong local_5c [4];
- ulong local_4c [4];
- ulong local_3c [4];
- Object local_2c;
- Object Obj;
-
- local_a5 = false;
- local_2c.ObjectID = 0;
- switch(Condition->Condition) {
- case CONDITION_ISPOSITION:
- local_5c[0] = Temp->ObjectID;
- local_6c[0].TypeID = Obj2->ObjectID;
- local_7c[0] = (Object)Obj1->ObjectID;
- z1 = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_4c[0];
- local_3c[0] = local_4c[0];
- UnpackAbsoluteCoordinate();
- z1 = local_2c.ObjectID;
- GetObjectCoordinates((Object *)&z1,&stack0xffffff5c,&x2,&y2);
- local_a5 = false;
- if ((z2 == iStack_a4) && (x1 == x2)) {
- bVar4 = y1 == y2;
-LAB_08072693:
- local_a5 = false;
- if (bVar4) {
-LAB_08072695:
- local_a5 = true;
- }
- }
- break;
- case CONDITION_ISTYPE:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- local_a5 = z1 == Condition->Parameters[1];
- break;
- case CONDITION_ISCREATURE:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- local_a5 = z1 == 99;
- break;
- case CONDITION_ISPLAYER:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
-LAB_08072828:
- pTVar5 = GetCreature((Object *)&z1);
- local_a5 = false;
- if (pTVar5 != (TCreature *)0x0) {
- bVar4 = pTVar5->Type == PLAYER;
- goto LAB_08072693;
- }
- }
- break;
- case CONDITION_HASFLAG:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Flag = Condition->Parameters[1];
- Object::getObjectType((Object *)&z1);
- local_a5 = ObjectType::getFlag((ObjectType *)&z1,Flag);
- break;
- case CONDITION_HASTYPEATTRIBUTE:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Attribute = Condition->Parameters[1];
- Object::getObjectType((Object *)&z1);
- uVar11 = ObjectType::getAttribute((ObjectType *)&z1,Attribute);
- iVar7 = Condition->Parameters[2];
- uVar10 = Condition->Parameters[3];
- switch(iVar7) {
- case 0x3c:
-switchD_0807323b_caseD_3c:
- local_a5 = (int)uVar11 < (int)uVar10;
- break;
- case 0x3d:
-switchD_0807323b_caseD_3d:
- local_a5 = uVar11 == uVar10;
- break;
- case 0x3e:
-switchD_0807323b_caseD_3e:
- local_a5 = (int)uVar10 < (int)uVar11;
- break;
- default:
-switchD_0807323b_caseD_3f:
- error(&DAT_080f79e0,iVar7,puVar16,puVar17);
- local_a5 = false;
- break;
- case 0x47:
-switchD_0807323b_caseD_47:
- local_a5 = (int)uVar10 <= (int)uVar11;
- break;
- case 0x4c:
-switchD_0807323b_caseD_4c:
- local_a5 = (int)uVar11 <= (int)uVar10;
- break;
- case 0x4e:
-switchD_0807323b_caseD_4e:
- local_a5 = uVar11 != uVar10;
- }
- break;
- case CONDITION_HASINSTANCEATTRIBUTE:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- uVar11 = Object::getAttribute(&local_2c,Condition->Parameters[1]);
- iVar7 = Condition->Parameters[2];
- uVar10 = Condition->Parameters[3];
- switch(iVar7) {
- case 0x3c:
- goto switchD_0807323b_caseD_3c;
- case 0x3d:
- goto switchD_0807323b_caseD_3d;
- case 0x3e:
- goto switchD_0807323b_caseD_3e;
- default:
- goto switchD_0807323b_caseD_3f;
- case 0x47:
- goto switchD_0807323b_caseD_47;
- case 0x4c:
- goto switchD_0807323b_caseD_4c;
- case 0x4e:
- goto switchD_0807323b_caseD_4e;
- }
- case CONDITION_HASTEXT:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- __s2 = GetDynamicString(Condition->Parameters[1]);
- uVar10 = Object::getAttribute(&local_2c,TEXTSTRING);
- __s1 = GetDynamicString(uVar10);
- iVar7 = strcmp(__s1,__s2);
- local_a5 = iVar7 == 0;
- break;
- case CONDITION_ISPEACEFUL:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- pOVar8 = local_6c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- puVar15 = local_5c;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- pOVar13 = &local_2c;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar5 = GetCreature((Object *)&z1);
- local_a5 = false;
- if (pTVar5 != (TCreature *)0x0) {
- iVar7 = (*pTVar5->_vptr_TCreature[4])(pTVar5,pOVar13,puVar16,puVar17,puVar15,pOVar8)
- ;
- cVar3 = (char)iVar7;
-LAB_08072b84:
- local_a5 = false;
- if (cVar3 != '\0') goto LAB_08072695;
- }
- }
- break;
- case CONDITION_MAYLOGOUT:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar5 = GetCreature((Object *)&z1);
- local_a5 = false;
- if ((pTVar5 != (TCreature *)0x0) && (pTVar5->Type == PLAYER)) {
- iVar7 = TCreature::LogoutPossible(pTVar5);
- bVar4 = iVar7 == 0;
- goto LAB_08072693;
- }
- }
- break;
- case CONDITION_HASPROFESSION:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar9 = (TPlayer *)GetCreature((Object *)&z1);
- local_a5 = false;
- if ((pTVar9 != (TPlayer *)0x0) && ((pTVar9->super_TCreature).Type == PLAYER)) {
- bVar2 = TPlayer::GetEffectiveProfession(pTVar9);
- bVar4 = (uint)bVar2 == Condition->Parameters[1];
- goto LAB_08072693;
- }
- }
- break;
- case CONDITION_HASLEVEL:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- puVar15 = local_5c;
- local_3c[0] = User->ObjectID;
- pOVar8 = local_6c;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar5 = GetCreature((Object *)&z1);
- local_a6 = false;
- if (pTVar5 != (TCreature *)0x0) {
- iVar6 = TSkill::Get((pTVar5->super_TSkillBase).Skills[0]);
- iVar7 = Condition->Parameters[2];
- switch(Condition->Parameters[1]) {
- case 0x3c:
- bVar4 = iVar6 < iVar7;
- break;
- case 0x3d:
- bVar4 = iVar6 == iVar7;
- break;
- case 0x3e:
- bVar4 = iVar7 < iVar6;
- break;
- default:
- error(&DAT_080f79e0,Condition->Parameters[1],puVar16,puVar17,puVar15,pOVar8);
- bVar4 = false;
- break;
- case 0x47:
- bVar4 = iVar7 <= iVar6;
- break;
- case 0x4c:
- bVar4 = iVar6 <= iVar7;
- break;
- case 0x4e:
- bVar4 = iVar6 != iVar7;
- }
- if (bVar4) {
- local_a6 = true;
- }
- }
- local_a5 = local_a6;
- }
- break;
- case CONDITION_HASRIGHT:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar5 = GetCreature((Object *)&z1);
- local_a5 = false;
- if ((pTVar5 != (TCreature *)0x0) && (pTVar5->Type == PLAYER)) {
- cVar3 = CheckRight(pTVar5->ID,Condition->Parameters[1]);
- goto LAB_08072b84;
- }
- }
- break;
- case CONDITION_HASQUESTVALUE:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- puVar16 = local_5c;
- local_5c[0] = Obj2->ObjectID;
- puVar15 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- pOVar8 = local_6c;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar9 = (TPlayer *)GetCreature((Object *)&z1);
- local_a7 = false;
- if ((pTVar9 != (TPlayer *)0x0) && ((pTVar9->super_TCreature).Type == PLAYER)) {
- iVar6 = TPlayer::GetQuestValue(pTVar9,Condition->Parameters[1]);
- iVar7 = Condition->Parameters[3];
- switch(Condition->Parameters[2]) {
- case 0x3c:
- bVar4 = iVar6 < iVar7;
- break;
- case 0x3d:
- bVar4 = iVar6 == iVar7;
- break;
- case 0x3e:
- bVar4 = iVar7 < iVar6;
- break;
- default:
- error(&DAT_080f79e0,Condition->Parameters[2],puVar15,puVar17,puVar16,pOVar8);
- bVar4 = false;
- break;
- case 0x47:
- bVar4 = iVar7 <= iVar6;
- break;
- case 0x4c:
- bVar4 = iVar6 <= iVar7;
- break;
- case 0x4e:
- bVar4 = iVar6 != iVar7;
- }
- if (bVar4) {
- local_a7 = true;
- }
- }
- local_a5 = local_a7;
- }
- break;
- case CONDITION_TESTSKILL:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- pOVar8 = local_6c;
- puVar16 = local_5c;
- local_5c[0] = Obj2->ObjectID;
- puVar15 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar5 = GetCreature((Object *)&z1);
- bVar4 = false;
- iVar7 = Condition->Parameters[1];
- if ((-1 < iVar7) && (iVar7 < 0x19)) {
- bVar4 = true;
- }
- if (bVar4) {
- local_a5 = false;
- if (pTVar5 != (TCreature *)0x0) {
- iVar7 = (*(pTVar5->super_TSkillBase).Skills[iVar7]->_vptr_TSkill[9])
- ((pTVar5->super_TSkillBase).Skills[iVar7],
- Condition->Parameters[2],Condition->Parameters[3],1);
- cVar3 = (char)iVar7;
- goto LAB_08072b84;
- }
- }
- else {
- error(&DAT_080f7a20,iVar7,puVar15,puVar17,puVar16,pOVar8);
- }
- }
- break;
- case CONDITION_COUNTOBJECTS:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- GetMapContainer((Object *)&z1);
- uVar11 = CountObjectsInContainer((Object *)&z1);
- iVar7 = Condition->Parameters[1];
- uVar10 = Condition->Parameters[2];
- switch(iVar7) {
- case 0x3c:
- goto switchD_0807323b_caseD_3c;
- case 0x3d:
- goto switchD_0807323b_caseD_3d;
- case 0x3e:
- goto switchD_0807323b_caseD_3e;
- default:
- goto switchD_0807323b_caseD_3f;
- case 0x47:
- goto switchD_0807323b_caseD_47;
- case 0x4c:
- goto switchD_0807323b_caseD_4c;
- case 0x4e:
- goto switchD_0807323b_caseD_4e;
- }
- case CONDITION_COUNTOBJECTSONMAP:
- UnpackAbsoluteCoordinate();
- GetMapContainer((int)&z1,z2,x1);
- uVar11 = CountObjectsInContainer((Object *)&z1);
- iVar7 = Condition->Parameters[1];
- uVar10 = Condition->Parameters[2];
- puVar16 = (ulong *)x1;
- puVar17 = (ulong *)y1;
- switch(iVar7) {
- case 0x3c:
- goto switchD_0807323b_caseD_3c;
- case 0x3d:
- goto switchD_0807323b_caseD_3d;
- case 0x3e:
- goto switchD_0807323b_caseD_3e;
- default:
- goto switchD_0807323b_caseD_3f;
- case 0x47:
- goto switchD_0807323b_caseD_47;
- case 0x4c:
- goto switchD_0807323b_caseD_4c;
- case 0x4e:
- goto switchD_0807323b_caseD_4e;
- }
- case CONDITION_ISOBJECTTHERE:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID(local_6c,Condition->Parameters[1]);
- goto LAB_080732ab;
- case CONDITION_ISCREATURETHERE:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID(local_6c,99);
-LAB_080732ab:
- GetFirstSpecObject();
-LAB_080732b0:
- Temp->ObjectID = (ulong)local_7c[0];
- local_a5 = Temp->ObjectID != NONE.ObjectID;
- break;
- case CONDITION_ISPLAYERTHERE:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID(local_6c,99);
- GetFirstSpecObject();
- Temp->ObjectID = (ulong)local_7c[0];
- z1 = Temp->ObjectID;
- if (z1 != NONE.ObjectID) goto LAB_08072828;
- break;
- case CONDITION_ISOBJECTININVENTORY:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 != 99) break;
- ObjectType::setTypeID(local_6c,Condition->Parameters[1]);
- pOVar8 = (ObjectType *)Object::getCreatureID(&local_2c);
- GetInventoryObject((ulong)local_7c,pOVar8,(ulong)local_6c);
- goto LAB_080732b0;
- case CONDITION_ISPROTECTIONZONE:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- GetObjectCoordinates((Object *)&z1,&z2,&x1,&y1);
- local_a5 = IsProtectionZone();
- break;
- case CONDITION_ISHOUSE:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- GetObjectCoordinates((Object *)&z1,&z2,&x1,&y1);
- local_a5 = IsHouse(z2,x1,y1);
- break;
- case CONDITION_ISHOUSEOWNER:
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- GetObjectCoordinates((Object *)&z1,&z2,&x1,&y1);
- local_6c[0].TypeID = Temp->ObjectID;
- local_5c[0] = Obj2->ObjectID;
- local_4c[0] = Obj1->ObjectID;
- local_3c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- if (z1 == 99) {
- z1 = local_2c.ObjectID;
- pTVar9 = (TPlayer *)GetCreature((Object *)&z1);
- local_a5 = false;
- if ((pTVar9 != (TPlayer *)0x0) && ((pTVar9->super_TCreature).Type == PLAYER)) {
- HouseID = GetHouseID(z2,x1,y1);
- cVar3 = IsOwner(HouseID,pTVar9);
- goto LAB_08072b84;
- }
- }
- break;
- case CONDITION_ISDRESSED:
- local_6c[0].TypeID = Temp->ObjectID;
- puVar17 = local_4c;
- local_5c[0] = Obj2->ObjectID;
- puVar16 = local_3c;
- local_4c[0] = Obj1->ObjectID;
- puVar15 = local_5c;
- local_3c[0] = User->ObjectID;
- pOVar8 = local_6c;
- GetEventObject();
- local_2c.ObjectID = local_7c[0].ObjectID;
- z1 = local_7c[0].ObjectID;
- Object::getObjectType((Object *)&z1);
- uVar14 = 0x2e;
- bVar4 = ObjectType::getFlag((ObjectType *)&z1,CLOTHES);
- if (bVar4) {
- z1 = local_2c.ObjectID;
- uVar10 = GetObjectBodyPosition((Object *)&z1);
- Object::getObjectType(local_7c);
- uVar11 = ObjectType::getAttribute((ObjectType *)local_7c,BODYPOSITION);
- local_a5 = uVar10 == uVar11;
- }
- else {
- error(&DAT_080f7a60,uVar14,puVar16,puVar17,puVar15,pOVar8);
- }
- break;
- case CONDITION_RANDOM:
- lVar12 = random();
- local_a5 = lVar12 <= Condition->Parameters[0];
- break;
- default:
- error("CheckCondition: Unbekannte Bedingung %d.\n",Condition->Condition);
- goto LAB_08072659;
- }
- MVar1 = Condition->Modifier;
- if (MVar1 == MODIFIER_INVERT) {
- local_a5 = (bool)(local_a5 ^ 1);
- }
- else {
- if ((int)MVar1 < 2) {
- if (MVar1 == MODIFIER_NORMAL) {
- return local_a5;
- }
- }
- else if (MVar1 == MODIFIER_TRUE) {
- return true;
- }
-LAB_08072659:
- local_a5 = false;
- }
- return local_a5;
-}
-
-
-
-Object CreateObject(Object *Con,ObjectType *Type,ulong Value)
-
-{
- bool bVar1;
- ObjectType *Type_00;
- RESULT r;
- int x;
- int y;
- int z;
- Object local_3c [4];
- Object local_2c [7];
-
- // try { // try from 08073896 to 08073934 has its CatchHandler @ 08073937
- Object::getObjectType(local_2c);
- bVar1 = false;
- if ((0 < (int)local_2c[0].ObjectID) && ((int)local_2c[0].ObjectID < 0xb)) {
- bVar1 = true;
- }
- if (bVar1) {
- ObjectType::setTypeID((ObjectType *)local_2c,*(int *)Value);
- local_3c[0].ObjectID = Type->TypeID;
- Type_00 = (ObjectType *)GetObjectCreatureID(local_3c);
- CreateAtCreature((ulong)Con,Type_00,(ulong)local_2c);
- }
- else {
- ObjectType::setTypeID((ObjectType *)local_3c,*(int *)Value);
- local_2c[0].ObjectID = Type->TypeID;
- Create(Con,(ObjectType *)local_2c,(ulong)local_3c);
- }
- return (Object)(ulong)Con;
-}
-
-
-
-void ChangeObject(Object *Obj,ObjectType *NewType,ulong Value)
-
-{
- bool bVar1;
- ulong uVar2;
- RESULT r;
- char *Text;
- int iVar3;
- Object local_5c [4];
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- Object Con;
-
- // try { // try from 08073a18 to 08073a5c has its CatchHandler @ 08073ce0
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- Object::getContainer(&local_2c);
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- // try { // try from 08073a6f to 08073b27 has its CatchHandler @ 08073b42
- Object::getObjectType(local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_3c,CUMULATIVE);
- if ((bVar1) && (uVar2 = Object::getAttribute(Obj,AMOUNT), 1 < uVar2)) {
- local_3c[0].ObjectID = NONE.ObjectID;
- uVar2 = Object::getAttribute(Obj,AMOUNT);
- local_4c[0].ObjectID = local_2c.ObjectID;
- local_5c[0] = (Object)Obj->ObjectID;
- Move(0,local_5c,local_4c,uVar2 - 1,true,local_3c);
- }
- ObjectType::setTypeID((ObjectType *)local_5c,NewType->TypeID);
- local_4c[0] = (Object)Obj->ObjectID;
- Change(local_4c,(ObjectType *)local_5c,Value);
- return;
- }
- iVar3 = NewType->TypeID;
- Text = &DAT_080f7ba0;
- }
- else {
- iVar3 = NewType->TypeID;
- Text = &DAT_080f7b40;
- }
- error(Text,iVar3);
- return;
-}
-
-
-
-void MoveOneObject(Object *Obj,Object *Con)
-
-{
- bool bVar1;
- RESULT r;
- char *Text;
- int x;
- int y;
- int z;
- Object local_3c [4];
- Object local_2c [7];
-
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- bVar1 = Object::exists(Con);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (bVar1) {
- Object::getObjectType(local_2c);
- if ((local_2c[0].ObjectID != 99) ||
- (Object::getObjectType(local_2c), local_2c[0].ObjectID == 0)) {
- // try { // try from 08073da1 to 08073e39 has its CatchHandler @ 08073e4c
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,LIQUIDPOOL);
- if (!bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,MAGICFIELD);
- if (!bVar1) {
- local_2c[0].ObjectID = NONE.ObjectID;
- local_3c[0] = (Object)Con->ObjectID;
- z = Obj->ObjectID;
- Move(0,(Object *)&z,local_3c,-1,true,local_2c);
- return;
- }
- }
- local_2c[0] = (Object)Obj->ObjectID;
- Delete(local_2c,-1);
- return;
- }
- Text = "MoveOneObject: \"Con\" ist kein MapContainer.\n";
- goto LAB_08073d18;
- }
- }
- Text = "MoveOneObject: \"Con\" ist kein Container.\n";
- }
- else {
- Text = &DAT_080f7c60;
- }
-LAB_08073d18:
- error(Text);
- return;
-}
-
-
-
-void MoveAllObjects(Object *Obj,Object *Dest,Object *Exclude,bool MoveUnmovable)
-
-{
- bool bVar1;
- Object *pOVar2;
- bool MoveUnmovable_local;
- int x;
- int y;
- int z;
- Object local_4c;
- ObjectType Type;
- Object local_3c [4];
- Object local_2c [7];
-
- local_2c[0].ObjectID = NONE.ObjectID;
- if (Obj->ObjectID != NONE.ObjectID) {
- pOVar2 = Dest;
- Object::getObjectType(local_2c);
- if (local_2c[0].ObjectID == 0) {
- local_2c[0] = (Object)Exclude->ObjectID;
- local_3c[0] = (Object)Dest->ObjectID;
- Object::getNextObject(&local_4c);
- MoveAllObjects(&local_4c,local_3c,local_2c,MoveUnmovable);
- local_4c = (Object)Exclude->ObjectID;
- if (Obj->ObjectID != local_4c.ObjectID) {
- Object::getObjectType(&local_4c);
- // try { // try from 08073fb1 to 0807408e has its CatchHandler @ 08074094
- Object::getObjectType(local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_3c,LIQUIDPOOL);
- if (!bVar1) {
- Object::getObjectType(local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_3c,MAGICFIELD);
- if (!bVar1) {
- if (!MoveUnmovable) {
- Object::getObjectType(local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_3c,UNMOVE);
- if (bVar1) {
- return;
- }
- }
- local_3c[0].ObjectID = NONE.ObjectID;
- local_2c[0] = (Object)Dest->ObjectID;
- z = Obj->ObjectID;
- Move(0,(Object *)&z,local_2c,-1,true,local_3c);
- return;
- }
- }
- local_3c[0] = (Object)Obj->ObjectID;
- Delete(local_3c,-1);
- }
- }
- else {
- error("MoveAllObjects: \"Dest\" ist kein Mapcontainer.\n",pOVar2);
- }
- }
- return;
-}
-
-
-
-void DeleteAllObjects(Object *Obj,Object *Exclude,bool DeleteUnmovable)
-
-{
- bool bVar1;
- RESULT r;
- int iStack_48;
- bool DeleteUnmovable_local;
- int x;
- int y;
- int z;
- Object local_2c [7];
-
- if (Obj->ObjectID != NONE.ObjectID) {
- local_2c[0] = (Object)Exclude->ObjectID;
- Object::getNextObject((Object *)&z);
- DeleteAllObjects((Object *)&z,local_2c,DeleteUnmovable);
- z = Exclude->ObjectID;
- if (Obj->ObjectID != z) {
- Object::getObjectType((Object *)&z);
- if (z == 99) {
- z = Obj->ObjectID;
- GetObjectCoordinates((Object *)&z,&stack0xffffffb8,&x,&y);
- error(&DAT_080f7e00,iStack_48,x,y);
- }
- else {
- if (!DeleteUnmovable) {
- // try { // try from 080741bb to 08074244 has its CatchHandler @ 0807429b
- Object::getObjectType((Object *)&z);
- bVar1 = ObjectType::getFlag((ObjectType *)&z,UNMOVE);
- if (bVar1) {
- Object::getObjectType((Object *)&z);
- bVar1 = ObjectType::getFlag((ObjectType *)&z,LIQUIDPOOL);
- if (!bVar1) {
- Object::getObjectType((Object *)&z);
- bVar1 = ObjectType::getFlag((ObjectType *)&z,MAGICFIELD);
- if (!bVar1) {
- return;
- }
- }
- }
- }
- z = Obj->ObjectID;
- Delete((Object *)&z,-1);
- }
- }
- }
- return;
-}
-
-
-
-void ClearField(Object *Obj,Object *Exclude)
-
-{
- bool bVar1;
- bool bVar2;
- Object *this;
- Object *Exclude_00;
- int local_58;
- int x;
- int y;
- int z;
- Object local_3c [4];
- Object local_2c [7];
-
- bVar1 = Object::exists(Obj);
- if (!bVar1) {
- error("ClearField: Objekt existiert nicht.\n");
- return;
- }
- local_2c[0] = (Object)Obj->ObjectID;
- GetObjectCoordinates(local_2c,&local_58,&x,&y);
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
- this = (Object *)&z;
- local_2c[0] = (Object)Exclude->ObjectID;
- GetMapContainer((int)local_3c,local_58 + 1,x);
- Object::getNextObject(this);
- Exclude_00 = local_2c;
- goto LAB_080743c6;
- }
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
-LAB_08074550:
- z = Exclude->ObjectID;
- x = x + 1;
-LAB_0807449d:
- GetMapContainer((int)local_3c,local_58,x);
- Object::getNextObject(local_2c);
- }
- else {
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
-LAB_08074594:
- z = Exclude->ObjectID;
- local_58 = local_58 + -1;
- goto LAB_0807449d;
- }
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
- z = Exclude->ObjectID;
- x = x + -1;
- goto LAB_0807449d;
- }
- bVar1 = JumpPossible(local_58 + 1,x,y,false);
- if (bVar1) {
- z = Exclude->ObjectID;
- local_58 = local_58 + 1;
- goto LAB_0807449d;
- }
- bVar1 = JumpPossible(local_58,x + 1,y,false);
- if (bVar1) goto LAB_08074550;
- bVar1 = JumpPossible(local_58 + -1,x,y,false);
- if (bVar1) goto LAB_08074594;
- bVar1 = JumpPossible(local_58,x + -1,y,false);
- if (!bVar1) {
- return;
- }
- z = Exclude->ObjectID;
- GetMapContainer((int)local_3c,local_58,x + -1);
- Object::getNextObject(local_2c);
- }
- Exclude_00 = (Object *)&z;
- this = local_2c;
-LAB_080743c6:
- MoveAllObjects(this,local_3c,Exclude_00,true);
- return;
-}
-
-
-
-void LoadDepotBox(ulong CreatureID,int Nr,Object *Con)
-
-{
- bool bVar1;
- TCreature *pTVar2;
- int iVar3;
- int iVar4;
- TCreature *cr;
- char *pcVar5;
- Object local_3c [4];
- Object local_2c [7];
-
- // try { // try from 0807470b to 08074872 has its CatchHandler @ 08074890
- pTVar2 = GetCreature(CreatureID);
- if (pTVar2 == (TCreature *)0x0) {
- pcVar5 = "moveuse::LoadDepotBox: Kreatur nicht gefunden.\n";
- }
- else {
- bVar1 = Object::exists(Con);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (bVar1) {
- if (pTVar2->Type == PLAYER) {
- local_2c[0] = (Object)Con->ObjectID;
- LoadDepot((TPlayerData *)pTVar2[1].super_TSkillBase.TimerList[10],Nr,local_2c);
- local_2c[0] = (Object)Con->ObjectID;
- pTVar2[1].super_TSkillBase.TimerList[6] = (TSkill *)local_2c[0].ObjectID;
- pTVar2[1].super_TSkillBase.TimerList[7] = (TSkill *)Nr;
- local_3c[0] = (Object)Con->ObjectID;
- iVar3 = CountObjects(local_3c);
- iVar3 = iVar3 + -1;
- bVar1 = CheckRight(pTVar2->ID,PREMIUM_ACCOUNT);
- iVar4 = GetDepotSize(Nr,bVar1);
- pTVar2[1].super_TSkillBase.TimerList[8] = (TSkill *)(iVar4 - iVar3);
- print();
- pcVar5 = "s";
- if (iVar3 == 1) {
- pcVar5 = "";
- }
- SendMessage(pTVar2->Connection,0x15,"Your depot contains %d item%s.",iVar3,
- pcVar5);
- if (-1 < (int)pTVar2[1].super_TSkillBase.TimerList[8]) {
- return;
- }
- SendMessage(pTVar2->Connection,0x16,
- "Your depot is full. Remove surplus items before storing new ones.",
- iVar3,pcVar5);
- return;
- }
- pcVar5 = "moveuse::LoadDepotBox: Kreatur ist kein Spieler.\n";
- }
- else {
- pcVar5 = &DAT_080f8020;
- }
- }
- else {
- pcVar5 = &DAT_080f7ee0;
- }
- }
- error(pcVar5);
- return;
-}
-
-
-
-void SaveDepotBox(ulong CreatureID,int Nr,Object *Con)
-
-{
- bool bVar1;
- TCreature *pTVar2;
- int iVar3;
- TCreature *cr;
- char *Text;
- int Count;
- Object Obj;
- Object local_2c [7];
-
- // try { // try from 080748cb to 08074a1a has its CatchHandler @ 08074a40
- pTVar2 = GetCreature(CreatureID);
- if (pTVar2 == (TCreature *)0x0) {
- Text = "moveuse::SaveDepotBox: Kreatur nicht gefunden.\n";
- }
- else {
- bVar1 = Object::exists(Con);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (bVar1) {
- if (pTVar2->Type == PLAYER) {
- local_2c[0] = (Object)Con->ObjectID;
- iVar3 = CountObjects(local_2c);
- Log("game",&DAT_080f8120,Nr,pTVar2->Name,iVar3 + -1);
- print();
- local_2c[0] = (Object)Con->ObjectID;
- SaveDepot((TPlayerData *)pTVar2[1].super_TSkillBase.TimerList[10],Nr,local_2c);
- Count = NONE.ObjectID;
- pTVar2[1].super_TSkillBase.TimerList[6] = (TSkill *)NONE.ObjectID;
- while( true ) {
- local_2c[0] = (Object)Con->ObjectID;
- GetFirstContainerObject((Object *)&Count);
- if (Count == NONE.ObjectID) break;
- local_2c[0].ObjectID = Count;
- Delete(local_2c,-1);
- }
- return;
- }
- Text = "moveuse::SaveDepotBox: Kreatur ist kein Spieler.\n";
- }
- else {
- Text = &DAT_080f81c0;
- }
- }
- else {
- Text = &DAT_080f80a0;
- }
- }
- error(Text);
- return;
-}
-
-
-
-void SendMail(Object *Obj)
-
-{
- uint *Text_00;
- TPlayer *pTVar1;
- ulong uVar2;
- bool bVar3;
- RESULT r_1;
- ulong uVar4;
- char *pcVar5;
- int iVar6;
- TDelayedMail *pTVar7;
- uchar *__dest;
- char *Text;
- uint *puVar8;
- uint *puVar9;
- char cVar10;
- uint uVar11;
- uint uVar12;
- int pos;
- int iVar13;
- int pos2;
- int iVar14;
- int *this;
- bool PlayerOnline;
- int DepotNumber;
- TPlayer *local_280;
- TPlayer *Player;
- char Town [256];
- char Addressee [256];
- undefined1 local_6c [4];
- TDynamicWriteBuffer Buffer;
- Object Label;
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c [7];
-
- // try { // try from 08074a78 to 08074d69 has its CatchHandler @ 08075210
- bVar3 = Object::exists(Obj);
- if (bVar3) {
- bVar3 = false;
- Object::getObjectType(local_2c);
- GetSpecialObject((SPECIALMEANING)local_3c);
- ObjectType::setTypeID((ObjectType *)local_4c,local_3c[0].ObjectID);
- if (local_2c[0].ObjectID != local_4c[0].ObjectID) {
- Object::getObjectType(local_4c);
- GetSpecialObject((SPECIALMEANING)&Buffer.super_TWriteBuffer.Position);
- ObjectType::setTypeID((ObjectType *)local_6c,Buffer.super_TWriteBuffer.Position);
- if ((undefined1 [4])local_4c[0].ObjectID != local_6c) {
- bVar3 = true;
- }
- }
- if (!bVar3) {
- print();
- Object::getObjectType((Object *)local_6c);
- GetSpecialObject((SPECIALMEANING)&Buffer.super_TWriteBuffer.Position);
- this = (int *)Obj;
- if (local_6c != (undefined1 [4])Buffer.super_TWriteBuffer.Position) {
- local_4c[0] = (Object)Obj->ObjectID;
- GetFirstContainerObject((Object *)&Buffer.super_TWriteBuffer.Position);
- while( true ) {
- bVar3 = false;
- local_4c[0].ObjectID = NONE.ObjectID;
- local_3c[0].ObjectID = NONE.ObjectID;
- if (Buffer.super_TWriteBuffer.Position != NONE.ObjectID) {
- Object::getObjectType(local_3c);
- GetSpecialObject((SPECIALMEANING)local_2c);
- ObjectType::setTypeID((ObjectType *)(Addressee + 0xfc),local_2c[0].ObjectID)
- ;
- if (local_3c[0].ObjectID != Addressee._252_4_) {
- bVar3 = true;
- }
- }
- if (!bVar3) break;
- Object::getNextObject(local_4c);
- Addressee._252_4_ = local_4c[0].ObjectID;
- Buffer.super_TWriteBuffer.Position = Addressee._252_4_;
- }
- Addressee._252_4_ = NONE.ObjectID;
- if (Buffer.super_TWriteBuffer.Position == NONE.ObjectID) {
- return;
- }
- this = &Buffer.super_TWriteBuffer.Position;
- }
- uVar4 = Object::getAttribute((Object *)this,TEXTSTRING);
- pcVar5 = GetDynamicString(uVar4);
- if (pcVar5 != (char *)0x0) {
- cVar10 = *pcVar5;
- iVar13 = 0;
- if ((cVar10 != '\n') && (cVar10 != '\0')) {
- while( true ) {
- Town[iVar13 + 0xfc] = cVar10;
- iVar13 = iVar13 + 1;
- cVar10 = pcVar5[iVar13];
- if (cVar10 == '\n') break;
- if ((cVar10 == '\0') || (0xff < iVar13)) break;
- }
- }
- iVar14 = 0;
- Town[iVar13 + 0xfc] = '\0';
- if ((pcVar5[iVar13 + 1] != '\n') && (iVar6 = iVar13, pcVar5[iVar13 + 1] != '\0')) {
- do {
- Town[iVar14 + -4] = pcVar5[iVar6 + 1];
- iVar14 = iVar14 + 1;
- if ((pcVar5[iVar14 + iVar13 + 1] == '\n') ||
- (pcVar5[iVar14 + iVar13 + 1] == '\0')) break;
- iVar6 = iVar14 + iVar13;
- } while (iVar14 < 0x100);
- }
- Town[iVar14 + -4] = '\0';
- Text_00 = (uint *)(Town + 0xfc);
- Trim((char *)Text_00);
- Trim((char *)&Player);
- puVar9 = Text_00;
- if (Town[0xfc] != '\0') {
- do {
- puVar8 = puVar9;
- uVar11 = *puVar8 + 0xfefefeff & ~*puVar8;
- uVar12 = uVar11 & 0x80808080;
- puVar9 = puVar8 + 1;
- } while (uVar12 == 0);
- bVar3 = (uVar11 & 0x8080) == 0;
- if (bVar3) {
- uVar12 = uVar12 >> 0x10;
- }
- if (bVar3) {
- puVar9 = (uint *)((int)puVar8 + 6);
- }
- if (((char *)((int)puVar9 +
- ((-3 - (uint)CARRY1((byte)uVar12,(byte)uVar12)) - (int)Text_00)) <
- (char *)0x1e) && ((char)Player != '\0')) {
- Log("game","Post an %s in %s.\n",Text_00,&Player);
- iVar13 = GetDepotNumber((char *)&Player);
- if (iVar13 != -1) {
- iVar14 = IdentifyPlayer((char *)Text_00,true,true,&local_280);
- bVar3 = iVar14 == 0;
- if (bVar3) {
- uVar4 = (local_280->super_TCreature).ID;
- }
- else {
- // try { // try from 08075019 to 08075139 has its CatchHandler @ 08075210
- uVar4 = GetCharacterID((char *)Text_00);
- if (uVar4 == 0) {
- return;
- }
- }
- uVar2 = Addressee._252_4_;
- if ((bVar3) && (local_280->DepotNr == iVar13)) {
- local_6c = (undefined1 [4])NONE.ObjectID;
- Addressee[0xfc] = (undefined1)NONE.ObjectID;
- Addressee[0xfd] = NONE.ObjectID._1_1_;
- Addressee[0xfe] = NONE.ObjectID._2_1_;
- Addressee[0xff] = NONE.ObjectID._3_1_;
- uVar2 = (ulong)local_6c;
- if ((local_280->Depot).ObjectID != NONE.ObjectID) {
- print();
- local_6c = (undefined1 [4])NONE.ObjectID;
- Buffer.super_TWriteBuffer.Position = (local_280->Depot).ObjectID
- ;
- local_4c[0] = (Object)Obj->ObjectID;
- // try { // try from 08074ef3 to 08075003 has its CatchHandler @ 08075152
- Move(0,local_4c,(Object *)&Buffer.super_TWriteBuffer.Position,-1
- ,true,(Object *)local_6c);
- Object::getObjectType((Object *)local_6c);
- GetSpecialObject((SPECIALMEANING)
- &Buffer.super_TWriteBuffer.Position);
- GetSpecialObject((SPECIALMEANING)
- &Buffer.super_TWriteBuffer.Position);
- local_4c[0] = (Object)Obj->ObjectID;
- Change(local_4c,(ObjectType *)
- &Buffer.super_TWriteBuffer.Position,0);
- Log("game","Post an %s in %s versandt.\n",Text_00,&Player);
- pTVar1 = local_280;
- local_6c = (undefined1 [4])Obj->ObjectID;
- iVar13 = CountObjects((Object *)local_6c);
- pTVar1->DepotSpace = pTVar1->DepotSpace - iVar13;
- iVar13 = local_280->DepotSpace;
- print();
- SendMessage((local_280->super_TCreature).Connection,0x16,
- "New mail has arrived.",iVar13);
- print();
- return;
- }
- }
- Addressee._252_4_ = uVar2;
- print();
- Object::getObjectType((Object *)local_6c);
- GetSpecialObject((SPECIALMEANING)&Buffer.super_TWriteBuffer.Position);
- GetSpecialObject((SPECIALMEANING)&Buffer.super_TWriteBuffer.Position);
- local_4c[0] = (Object)Obj->ObjectID;
- Change(local_4c,(ObjectType *)&Buffer.super_TWriteBuffer.Position,0);
- // try { // try from 08074d78 to 08074d7c has its CatchHandler @ 08075205
- TDynamicWriteBuffer::TDynamicWriteBuffer
- ((TDynamicWriteBuffer *)local_6c,0x400);
- Buffer.super_TWriteBuffer.Position = Obj->ObjectID;
- // try { // try from 08074d97 to 08074de3 has its CatchHandler @ 080751b6
- SaveObjects((Object *)&Buffer.super_TWriteBuffer.Position,
- (TWriteStream *)local_6c,true);
- Buffer.super_TWriteBuffer.Position = Obj->ObjectID;
- Delete((Object *)&Buffer.super_TWriteBuffer.Position,-1);
- pTVar7 = vector<>::operator()(&DelayedMail,DelayedMails);
- pTVar7->CharacterID = uVar4;
- pTVar7->DepotNumber = iVar13;
- pTVar7->PacketSize = Buffer.super_TWriteBuffer.Size;
- __dest = (uchar *)operator_new__(Buffer.super_TWriteBuffer.Size);
- pTVar7->Packet = __dest;
- memcpy(__dest,Buffer.super_TWriteBuffer.super_TWriteStream.
- _vptr_TWriteStream,pTVar7->PacketSize);
- // try { // try from 08074e03 to 08074e07 has its CatchHandler @ 08075205
- TDynamicWriteBuffer::~TDynamicWriteBuffer
- ((TDynamicWriteBuffer *)local_6c,
- (int)Buffer.super_TWriteBuffer.super_TWriteStream.
- _vptr_TWriteStream);
- DelayedMails = DelayedMails + 1;
- // try { // try from 08074e2b to 08074eaa has its CatchHandler @ 08075210
- Log("game",&DAT_080f82c0,Text_00,&Player);
- print();
- if (bVar3) {
- SendMails(local_280->PlayerData);
- }
- else {
- LoadCharacterOrder(uVar4);
- }
- }
- }
- }
- }
- }
- }
- else {
- error(&DAT_080f8240);
- }
- return;
-}
-
-
-
-void SendMails(TPlayerData *PlayerData)
-
-{
- __pid_t _Var1;
- TDelayedMail *pTVar2;
- uint uVar3;
- uchar *__dest;
- TDelayedMail *pTVar4;
- int iVar5;
- TDelayedMail *D;
- int i;
- int i_00;
- bool bVar6;
- char *Text;
- uchar *NewDepot;
- int NewDepotSize;
- ushort local_3c;
- bool DepotEmpty;
- undefined1 local_2c [4];
- TWriteBuffer Buffer;
-
- if (PlayerData == (TPlayerData *)0x0) {
- Text = "SendMails: PlayerData ist NULL.\n";
- }
- else if (PlayerData->CharacterID == 0) {
- Text = "SendMails: Slot ist nicht belegt.\n";
- }
- else {
- _Var1 = getpid();
- if (PlayerData->Locked == _Var1) {
- if (DelayedMails < 1) {
- return;
- }
- i_00 = 0;
- do {
- pTVar2 = vector<>::operator()(&DelayedMail,i_00);
- if (pTVar2->CharacterID == PlayerData->CharacterID) {
- iVar5 = pTVar2->DepotNumber;
- bVar6 = false;
- if ((-1 < iVar5) && (iVar5 < 9)) {
- bVar6 = true;
- }
- if (!bVar6) {
- error(&DAT_080f84e0,iVar5);
- iVar5 = 0;
- pTVar2->DepotNumber = 0;
- }
- bVar6 = PlayerData->Depot[iVar5] != (uchar *)0x0;
- if (bVar6) {
- uVar3 = pTVar2->PacketSize + PlayerData->DepotSize[iVar5];
- }
- else {
- uVar3 = pTVar2->PacketSize + 5;
- }
- __dest = (uchar *)operator_new__(uVar3);
- memcpy(__dest,pTVar2->Packet,pTVar2->PacketSize);
- if (pTVar2->Packet != (uchar *)0x0) {
- operator_delete__(pTVar2->Packet);
- }
- if (bVar6) {
- memcpy(__dest + pTVar2->PacketSize,PlayerData->Depot[pTVar2->DepotNumber],
- PlayerData->DepotSize[pTVar2->DepotNumber]);
- iVar5 = pTVar2->DepotNumber;
- if (PlayerData->Depot[iVar5] != (uchar *)0x0) {
- operator_delete__(PlayerData->Depot[iVar5]);
- goto LAB_0807537c;
- }
- }
- else {
- TWriteBuffer::TWriteBuffer
- ((TWriteBuffer *)local_2c,__dest + pTVar2->PacketSize,5);
- GetSpecialObject((SPECIALMEANING)&local_3c);
- TWriteBuffer::writeWord((TWriteBuffer *)local_2c,local_3c);
- TWriteBuffer::writeByte((TWriteBuffer *)local_2c,0xff);
- TWriteBuffer::writeWord((TWriteBuffer *)local_2c,0xffff);
-LAB_0807537c:
- iVar5 = pTVar2->DepotNumber;
- }
- PlayerData->Depot[iVar5] = __dest;
- iVar5 = pTVar2->DepotNumber;
- PlayerData->Dirty = true;
- PlayerData->DepotSize[iVar5] = uVar3;
- Log("game","Post an %s zugestellt.\n",PlayerData->Name);
- if (i_00 != DelayedMails + -1) {
- pTVar2 = vector<>::operator()(&DelayedMail,i_00);
- pTVar4 = vector<>::operator()(&DelayedMail,DelayedMails + -1);
- pTVar2->CharacterID = pTVar4->CharacterID;
- pTVar2->DepotNumber = pTVar4->DepotNumber;
- pTVar2->Packet = pTVar4->Packet;
- pTVar2->PacketSize = pTVar4->PacketSize;
- }
- DelayedMails = DelayedMails + -1;
- i_00 = i_00 + -1;
- }
- i_00 = i_00 + 1;
- if (DelayedMails <= i_00) {
- return;
- }
- } while( true );
- }
- Text = "SendMails: Slot ist nicht vom GameThread gesperrt.\n";
- }
- error(Text);
- return;
-}
-
-
-
-void TextEffect(char *Text,int x,int y,int z,int Radius)
-
-{
- TConnection *this;
- ulong ID;
- ulong CharacterID;
- TPlayer *pTVar1;
- TConnection *Connection;
- int local_58;
- int destX;
- int destY;
- int destZ;
- TFindCreatures Search;
-
- if (Text == (char *)0x0) {
- error("TextEffect: Text existiert nicht.\n");
- }
- else {
- TFindCreatures::TFindCreatures((TFindCreatures *)&destZ,Radius,Radius,x,y,1);
- while( true ) {
- CharacterID = TFindCreatures::getNext((TFindCreatures *)&destZ);
- if (CharacterID == 0) break;
- pTVar1 = GetPlayer(CharacterID);
- if ((pTVar1 != (TPlayer *)0x0) &&
- (this = (pTVar1->super_TCreature).Connection, this != (TConnection *)0x0)) {
- TConnection::GetPosition(this,&local_58,&destX,&destY);
- if (((7 < Radius) || (z == destY)) &&
- (((0x1e < Radius || (z == destY)) || ((z < 8 && (destY < 8)))))) {
- SendTalk(this,0,"",0x10,x,y,z,Text);
- }
- }
- }
- }
- return;
-}
-
-
-
-void ExecuteAction(EventType Event,TMoveUseAction *Action,Object *User,Object *Obj1,Object *Obj2,
- Object *Temp)
-
-{
- bool bVar1;
- ulong uVar2;
- TPlayer *pTVar3;
- undefined4 *puVar4;
- char *__s;
- size_t sVar5;
- TCreature *pTVar6;
- ulong uVar7;
- int iVar8;
- uint *puVar9;
- uint *puVar10;
- RESULT r;
- uint uVar11;
- uint uVar12;
- TCreature *cr;
- bool bVar13;
- char *pcVar14;
- ActionType AVar15;
- Object *pOVar16;
- INSTANCEATTRIBUTE Attribute;
- ulong *puVar17;
- Object *pOVar18;
- Object *pOVar19;
- Object *pOVar20;
- int local_1c4;
- int pos;
- char *Text2;
- TCreature *cr2;
- int dx;
- int dy;
- int dz;
- int x;
- int y;
- int z;
- Object local_18c [4];
- Object local_17c [4];
- Object local_16c [4];
- Object local_15c [4];
- ulong local_14c [4];
- uint local_13c;
- char Text [256];
- Object Con;
- Object local_2c;
- Object Obj;
-
- Text[0xfc] = '\0';
- Text[0xfd] = '\0';
- Text[0xfe] = '\0';
- Text[0xff] = '\0';
- local_2c.ObjectID = 0;
- switch(Action->Action) {
- case ACTION_CREATEONMAP:
- // try { // try from 08075619 to 08077e1c has its CatchHandler @ 08077e32
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_16c,Action->Parameters[1]);
- GetMapContainer((int)local_17c,dz,x);
- CreateObject(local_15c,(ObjectType *)local_17c,(ulong)local_16c);
- Temp->ObjectID = (ulong)local_15c[0];
- break;
- case ACTION_CREATE:
- local_15c[0] = (Object)Temp->ObjectID;
- local_14c[0] = Obj2->ObjectID;
- local_18c[0] = (Object)Obj1->ObjectID;
- z = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_16c[0].ObjectID;
- local_17c[0].ObjectID = local_16c[0].ObjectID;
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- Object::getContainer(local_16c);
- CreateObject(local_18c,(ObjectType *)local_16c,(ulong)local_17c);
- Temp->ObjectID = (ulong)local_18c[0];
- break;
- case ACTION_MONSTERONMAP:
- UnpackAbsoluteCoordinate();
- iVar8 = Action->Parameters[1];
- goto LAB_080757f5;
- case ACTION_MONSTER:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- iVar8 = Action->Parameters[1];
-LAB_080757f5:
- CreateMonster(iVar8,dz,x,y,0,0,true);
- break;
- case ACTION_EFFECTONMAP:
- UnpackAbsoluteCoordinate();
- GetMapContainer((int)&z,dz,x);
- goto LAB_08075945;
- case ACTION_EFFECT:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetMapContainer((Object *)&z);
-LAB_08075945:
- GraphicalEffect((Object *)&z,Action->Parameters[1]);
- break;
- case ACTION_TEXTONMAP:
- UnpackAbsoluteCoordinate();
- pcVar14 = GetDynamicString(Action->Parameters[1]);
- goto LAB_08075a34;
- case ACTION_TEXT:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- pcVar14 = GetDynamicString(Action->Parameters[1]);
-LAB_08075a34:
- TextEffect(pcVar14,dz,x,y,Action->Parameters[2]);
- break;
- case ACTION_CHANGEONMAP:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- GetFirstSpecObject();
- Temp->ObjectID = (ulong)local_18c[0];
- z = NONE.ObjectID;
- if (Temp->ObjectID == NONE.ObjectID) {
- iVar8 = Action->Parameters[1];
- pcVar14 = "ExecuteAction (CHANGEONMAP): Kein Objekt %d auf [%d,%d,%d].\n";
-LAB_08075be0:
- NONE.ObjectID = z;
- error(pcVar14,iVar8,dz,x,y);
- return;
- }
- ObjectType::setTypeID((ObjectType *)&z,Action->Parameters[2]);
- local_18c[0] = (Object)Temp->ObjectID;
- uVar7 = Action->Parameters[3];
- goto LAB_08075c18;
- case ACTION_CHANGE:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- ObjectType::setTypeID((ObjectType *)&z,Action->Parameters[1]);
- local_18c[0].ObjectID = local_2c.ObjectID;
- uVar7 = Action->Parameters[2];
- goto LAB_08075c18;
- case ACTION_CHANGEREL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- UnpackRelativeCoordinate();
- dz = (int)(cr2->super_TSkillBase).Skills + dz + -4;
- x = x + dx;
- y = y + dy;
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[2]);
- GetFirstSpecObject();
- Temp->ObjectID = (ulong)local_18c[0];
- z = NONE.ObjectID;
- if (Temp->ObjectID == NONE.ObjectID) {
- iVar8 = Action->Parameters[2];
- pcVar14 = "ExecuteAction (CHANGEREL): Kein Objekt %d auf [%d,%d,%d].\n";
- goto LAB_08075be0;
- }
- ObjectType::setTypeID((ObjectType *)&z,Action->Parameters[3]);
- local_18c[0] = (Object)Temp->ObjectID;
- uVar7 = Action->Parameters[4];
-LAB_08075c18:
- ChangeObject(local_18c,(ObjectType *)&z,uVar7);
- break;
- case ACTION_SETATTRIBUTE:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- uVar7 = Action->Parameters[2];
- Attribute = Action->Parameters[1];
- goto LAB_08075f26;
- case ACTION_CHANGEATTRIBUTE:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- uVar7 = Object::getAttribute(&local_2c,Action->Parameters[1]);
- uVar7 = uVar7 + Action->Parameters[2];
- if ((int)uVar7 < 1) {
- dz = uVar7;
- uVar7 = Object::getAttribute(&local_2c,Action->Parameters[1]);
- uVar7 = (ulong)(uVar7 != 0);
- }
- Attribute = Action->Parameters[1];
- dz = uVar7;
- goto LAB_08075f26;
- case ACTION_SETQUESTVALUE:
- pOVar18 = local_15c;
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar19 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pOVar20 = local_17c;
- GetEventObject();
- pOVar16 = &local_2c;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getObjectType((Object *)&z);
- if (z == 99) {
- z = local_2c.ObjectID;
- pTVar3 = (TPlayer *)GetCreature((Object *)&z);
- if ((pTVar3 != (TPlayer *)0x0) && ((pTVar3->super_TCreature).Type == PLAYER)) {
- TPlayer::SetQuestValue(pTVar3,Action->Parameters[1],Action->Parameters[2]);
- return;
- }
- pcVar14 =
- "ExecuteAction (SETQUESTVALUE): Kreatur existiert nicht oder ist kein Spieler.\n";
-LAB_08076102:
- error(pcVar14,pOVar16,puVar17,pOVar18,pOVar19,pOVar20);
- return;
- }
- Object::getObjectType((Object *)&z);
- pcVar14 = "ExecuteAction (SETQUESTVALUE): Objekt ist keine Kreatur, sondern Typ %ld.\n";
- AVar15 = z;
- goto switchD_080755eb_default;
- case ACTION_DAMAGE:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- Text2 = (char *)0x0;
- local_2c.ObjectID = local_18c[0].ObjectID;
- bVar13 = local_18c[0].ObjectID != NONE.ObjectID;
- z = NONE.ObjectID;
- local_18c[0].ObjectID = NONE.ObjectID;
- if (bVar13) {
- Object::getObjectType(local_18c);
- if (local_18c[0].ObjectID == 99) {
- local_18c[0].ObjectID = local_2c.ObjectID;
- Text2 = (char *)GetCreature(local_18c);
- }
- Object::getObjectType(local_18c);
- bVar13 = ObjectType::getFlag((ObjectType *)local_18c,MAGICFIELD);
- if ((bVar13) && (uVar7 = Object::getAttribute(&local_2c,RESPONSIBLE), uVar7 != 0)) {
- local_18c[0].ObjectID = local_2c.ObjectID;
- uVar7 = CronInfo(local_18c,false);
- Object::getObjectType(local_17c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_17c,TOTALEXPIRETIME);
- if (uVar2 < uVar7 + 5) {
- uVar7 = Object::getAttribute(&local_2c,RESPONSIBLE);
- Text2 = (char *)GetCreature(uVar7);
- }
- }
- }
- pOVar20 = local_17c;
- pOVar19 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pOVar18 = local_15c;
- GetEventObject();
- pOVar16 = &local_2c;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getObjectType((Object *)&z);
- if (z == 99) {
- z = local_2c.ObjectID;
- pTVar6 = GetCreature((Object *)&z);
- if (pTVar6 != (TCreature *)0x0) {
- TCreature::Damage(pTVar6,(TCreature *)Text2,Action->Parameters[3],
- Action->Parameters[2]);
- return;
- }
- pcVar14 = "ExecuteAction (DAMAGE): Kreatur existiert nicht.\n";
- goto LAB_08076102;
- }
- Object::getObjectType((Object *)&z);
- pcVar14 = "ExecuteAction (DAMAGE): Objekt ist keine Kreatur, sondern Typ %d.\n";
- AVar15 = z;
- goto switchD_080755eb_default;
- case ACTION_SETSTART:
- pOVar20 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- puVar17 = local_14c;
- local_16c[0] = (Object)Obj2->ObjectID;
- pOVar16 = local_15c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pOVar19 = local_17c;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = (char *)&local_2c;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z == 99) {
- z = local_2c.ObjectID;
- pTVar3 = (TPlayer *)GetCreature((Object *)&z);
- uVar7 = Text._252_4_;
- if ((pTVar3 != (TPlayer *)0x0) && ((pTVar3->super_TCreature).Type == PLAYER)) {
- Log("game",&DAT_080f8780,(pTVar3->super_TCreature).Name,pOVar16,pOVar20,pOVar19);
- UnpackAbsoluteCoordinate();
- TPlayer::SaveData(pTVar3);
- return;
- }
- }
- goto LAB_08076474;
- case ACTION_WRITENAME:
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar20 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- pOVar16 = local_15c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- puVar17 = local_14c;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = (char *)&local_2c;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z != 99) goto LAB_08076474;
- z = local_2c.ObjectID;
- pTVar6 = GetCreature((Object *)&z);
- uVar7 = Text._252_4_;
- if (pTVar6 == (TCreature *)0x0) goto LAB_08076474;
- puVar10 = &local_13c;
- for (iVar8 = 0x40; iVar8 != 0; iVar8 = iVar8 + -1) {
- *puVar10 = 0;
- puVar10 = puVar10 + 1;
- }
- __s = GetDynamicString(Action->Parameters[1]);
- for (local_1c4 = 0; sVar5 = strlen(__s), local_1c4 < (int)sVar5; local_1c4 = local_1c4 + 1)
- {
- if ((__s[local_1c4] == '%') && (__s[local_1c4 + 1] == 'N')) {
- pcVar14 = pTVar6->Name;
- local_1c4 = local_1c4 + 1;
- strcat((char *)&local_13c,pcVar14);
- }
- else {
- puVar10 = &local_13c;
- do {
- puVar9 = puVar10;
- uVar11 = *puVar9 + 0xfefefeff & ~*puVar9;
- uVar12 = uVar11 & 0x80808080;
- puVar10 = puVar9 + 1;
- } while (uVar12 == 0);
- bVar13 = (uVar11 & 0x8080) == 0;
- if (bVar13) {
- uVar12 = uVar12 >> 0x10;
- }
- if (bVar13) {
- puVar10 = (uint *)((int)puVar9 + 6);
- }
- *(char *)((int)puVar10 + (-3 - (uint)CARRY1((byte)uVar12,(byte)uVar12))) =
- __s[local_1c4];
- }
- uVar7 = Text._252_4_;
- if (Text[0xc4] != '\0') goto LAB_08076474;
- }
- pOVar20 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- puVar17 = local_14c;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pOVar16 = local_15c;
- pcVar14 = (char *)Action->Parameters[2];
- GetEventObject();
- bVar13 = false;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- if (local_18c[0].ObjectID == NONE.ObjectID) {
-LAB_08076725:
- bVar13 = true;
- }
- else {
- Object::getObjectType(local_18c);
- pcVar14 = (char *)0x18;
- bVar1 = ObjectType::getFlag((ObjectType *)local_18c,TEXT);
- if (!bVar1) goto LAB_08076725;
- }
- uVar7 = Text._252_4_;
- if (bVar13) goto LAB_08076474;
- uVar7 = Object::getAttribute(&local_2c,TEXTSTRING);
- DeleteDynamicString(uVar7);
- z = local_2c.ObjectID;
- uVar7 = AddDynamicString((char *)&local_13c);
- Change((Object *)&z,TEXTSTRING,uVar7);
- uVar7 = 0;
- Attribute = EDITOR;
- goto LAB_08075f26;
- case ACTION_WRITETEXT:
- pOVar20 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar16 = local_15c;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pcVar14 = (char *)Action->Parameters[1];
- GetEventObject();
- bVar13 = false;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- if (local_18c[0].ObjectID == NONE.ObjectID) {
-LAB_08076857:
- bVar13 = true;
- }
- else {
- Object::getObjectType(local_18c);
- pcVar14 = (char *)0x18;
- bVar1 = ObjectType::getFlag((ObjectType *)local_18c,TEXT);
- if (!bVar1) goto LAB_08076857;
- }
- uVar7 = Text._252_4_;
- if (bVar13) goto LAB_08076474;
- uVar7 = Object::getAttribute(&local_2c,TEXTSTRING);
- DeleteDynamicString(uVar7);
- z = local_2c.ObjectID;
- pcVar14 = GetDynamicString(Action->Parameters[0]);
- uVar7 = AddDynamicString(pcVar14);
- Change((Object *)&z,TEXTSTRING,uVar7);
- uVar7 = 0;
- Attribute = EDITOR;
-LAB_08075f26:
- z = local_2c.ObjectID;
- Change((Object *)&z,Attribute,uVar7);
- break;
- case ACTION_LOGOUT:
- pOVar20 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- puVar17 = local_14c;
- local_16c[0] = (Object)Obj2->ObjectID;
- pOVar16 = local_15c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = (char *)&local_2c;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z == 99) {
- z = local_2c.ObjectID;
- pTVar6 = GetCreature((Object *)&z);
- uVar7 = Text._252_4_;
- if (pTVar6 != (TCreature *)0x0) {
- TCreature::StartLogout(pTVar6,true,true);
- return;
- }
- }
- goto LAB_08076474;
- case ACTION_MOVEALLONMAP:
- UnpackAbsoluteCoordinate();
- GetFirstObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- UnpackAbsoluteCoordinate();
- GetMapContainer((int)local_18c,dz,x);
- bVar13 = false;
- z = NONE.ObjectID;
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- local_17c[0].ObjectID = local_2c.ObjectID;
- goto LAB_08076acf;
- case ACTION_MOVEALL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getContainer(local_17c);
- GetFirstContainerObject(local_18c);
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- UnpackAbsoluteCoordinate();
- goto LAB_08076bd6;
- case ACTION_MOVEALLREL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getContainer(local_17c);
- GetFirstContainerObject(local_18c);
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- UnpackRelativeCoordinate();
- x = dx + x;
- dz = (int)(cr2->super_TSkillBase).Skills + dz + -4;
-LAB_08076bd6:
- GetMapContainer((int)local_18c,dz,x);
- bVar13 = false;
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- z = local_2c.ObjectID;
- local_17c[0].ObjectID = local_2c.ObjectID;
- goto LAB_08076acf;
- case ACTION_MOVETOPONMAP:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- GetFirstSpecObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- if (local_18c[0].ObjectID == NONE.ObjectID) {
- iVar8 = Action->Parameters[1];
- pcVar14 = "ExecuteAction (MOVETOPONMAP): Kein Objekt %d auf [%d,%d,%d].\n";
- goto LAB_08075be0;
- }
- UnpackAbsoluteCoordinate();
- GetMapContainer((int)local_18c,dz,x);
- z = NONE.ObjectID;
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- Object::getNextObject(local_17c);
- bVar13 = true;
- goto LAB_08076acf;
- case ACTION_MOVETOP:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- UnpackAbsoluteCoordinate();
- goto LAB_08076f87;
- case ACTION_MOVETOPREL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- UnpackRelativeCoordinate();
- x = dx + x;
- dz = (int)(cr2->super_TSkillBase).Skills + dz + -4;
-LAB_08076f87:
- GetMapContainer((int)local_18c,dz,x);
- z = NONE.ObjectID;
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- Object::getNextObject(local_17c);
- bVar13 = true;
-LAB_08076acf:
- MoveAllObjects(local_17c,local_18c,(Object *)&z,bVar13);
- break;
- case ACTION_MOVE:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- UnpackAbsoluteCoordinate();
- GetMapContainer((int)local_18c,dz,x);
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- goto LAB_080771eb;
- case ACTION_MOVEREL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- local_18c[0] = (Object)Temp->ObjectID;
- local_17c[0] = (Object)Obj2->ObjectID;
- local_16c[0] = (Object)Obj1->ObjectID;
- local_15c[0] = (Object)User->ObjectID;
- GetEventObject();
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- UnpackRelativeCoordinate();
- GetMapContainer((int)local_18c,(int)(cr2->super_TSkillBase).Skills + dz + -4,dx + x);
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- goto LAB_080771eb;
- case ACTION_RETRIEVE:
- local_18c[0] = (Object)Temp->ObjectID;
- local_17c[0] = (Object)Obj2->ObjectID;
- local_16c[0] = (Object)Obj1->ObjectID;
- local_15c[0] = (Object)User->ObjectID;
- GetEventObject();
- GetObjectCoordinates((Object *)&z,&dz,&x,&y);
- UnpackRelativeCoordinate();
- GetTopObject((int)local_18c,(int)(cr2->super_TSkillBase).Skills + dz + -4,dx + x,
- (bool)((char)dy + (char)y));
- bVar13 = false;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- if (local_18c[0].ObjectID == NONE.ObjectID) {
-LAB_080774d6:
- bVar13 = true;
- }
- else {
- Object::getObjectType(local_18c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_18c,UNMOVE);
- if (bVar1) goto LAB_080774d6;
- }
- if (bVar13) {
- return;
- }
- UnpackRelativeCoordinate();
- GetMapContainer((int)local_18c,(int)(cr2->super_TSkillBase).Skills + dz + -4,dx + x);
- Text._252_4_ = local_18c[0].ObjectID;
-LAB_080771eb:
- z = Text._252_4_;
- local_18c[0].ObjectID = local_2c.ObjectID;
- MoveOneObject(local_18c,(Object *)&z);
- break;
- case ACTION_DELETEALLONMAP:
- UnpackAbsoluteCoordinate();
- GetFirstObject();
- bVar13 = false;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- goto LAB_0807762f;
- case ACTION_DELETETOPONMAP:
- UnpackAbsoluteCoordinate();
- pOVar20 = local_17c;
- ObjectType::setTypeID((ObjectType *)pOVar20,Action->Parameters[1]);
- GetFirstSpecObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- pcVar14 = (char *)dz;
- puVar17 = (ulong *)x;
- pOVar16 = (Object *)y;
- uVar7 = Text._252_4_;
- if (local_18c[0].ObjectID == NONE.ObjectID) goto LAB_08076474;
- z = local_18c[0].ObjectID;
- Object::getNextObject(local_18c);
- bVar13 = true;
-LAB_0807762f:
- DeleteAllObjects(local_18c,(Object *)&z,bVar13);
- break;
- case ACTION_DELETEONMAP:
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- GetFirstSpecObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- if (local_18c[0].ObjectID == NONE.ObjectID) {
- iVar8 = Action->Parameters[1];
- pcVar14 = "ExecuteAction (DELETEONMAP): Kein Objekt %d auf [%d,%d,%d].\n";
- goto LAB_08075be0;
- }
- goto LAB_080777c6;
- case ACTION_DELETE:
- pOVar16 = local_15c;
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar20 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- pcVar14 = (char *)Action->Parameters[0];
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = NONE.ObjectID;
- uVar7 = Text._252_4_;
- if (local_18c[0].ObjectID == NONE.ObjectID) goto LAB_08076474;
-LAB_080777c6:
- Delete((Object *)&z,(-(uint)(Event < EVENT_MOVEMENT) & 2) - 1);
- break;
- case ACTION_DELETEININVENTORY:
- pOVar20 = local_16c;
- local_17c[0] = (Object)Temp->ObjectID;
- puVar17 = local_14c;
- local_16c[0] = (Object)Obj2->ObjectID;
- pOVar16 = local_15c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = (char *)&local_2c;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z != 99) goto LAB_08076474;
- ObjectType::setTypeID((ObjectType *)&z,Action->Parameters[1]);
- uVar7 = Object::getCreatureID(&local_2c);
- DeleteAtCreature(uVar7,(ObjectType *)&z,1,Action->Parameters[2]);
- break;
- case ACTION_DESCRIPTION:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getObjectType((Object *)&z);
- if (z == 99) {
- z = local_2c.ObjectID;
- pTVar6 = GetCreature((Object *)&z);
- if ((pTVar6 != (TCreature *)0x0) && (pTVar6->Type == PLAYER)) {
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar16 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- pOVar20 = local_17c;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = GetInfo((Object *)&z);
- SendMessage(pTVar6->Connection,0x16,"%s.",pcVar14,pOVar16,pOVar20);
- }
- }
- break;
- case ACTION_LOADDEPOT:
- pOVar16 = local_15c;
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar20 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- pcVar14 = (char *)&local_2c;
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z == 99) {
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- pOVar20 = local_17c;
- GetFirstSpecObject();
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- z = NONE.ObjectID;
- pcVar14 = (char *)dz;
- puVar17 = (ulong *)x;
- pOVar16 = (Object *)y;
- uVar7 = Text._252_4_;
- if (local_18c[0].ObjectID != NONE.ObjectID) {
- z = local_18c[0].ObjectID;
- uVar7 = Object::getCreatureID(&local_2c);
- LoadDepotBox(uVar7,Action->Parameters[3],(Object *)&z);
- return;
- }
- }
- goto LAB_08076474;
- case ACTION_SAVEDEPOT:
- pOVar16 = local_15c;
- local_17c[0] = (Object)Temp->ObjectID;
- pOVar20 = local_16c;
- local_16c[0] = (Object)Obj2->ObjectID;
- puVar17 = local_14c;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- pcVar14 = (char *)&local_2c;
- Object::getObjectType((Object *)&z);
- uVar7 = Text._252_4_;
- if (z == 99) {
- UnpackAbsoluteCoordinate();
- ObjectType::setTypeID((ObjectType *)local_17c,Action->Parameters[1]);
- pOVar20 = local_17c;
- GetFirstSpecObject();
- z = NONE.ObjectID;
- Text[0xfc] = (undefined1)local_18c[0].ObjectID;
- Text[0xfd] = local_18c[0].ObjectID._1_1_;
- Text[0xfe] = local_18c[0].ObjectID._2_1_;
- Text[0xff] = local_18c[0].ObjectID._3_1_;
- pcVar14 = (char *)dz;
- puVar17 = (ulong *)x;
- pOVar16 = (Object *)y;
- uVar7 = local_18c[0].ObjectID;
- if (local_18c[0].ObjectID != NONE.ObjectID) {
- z = local_18c[0].ObjectID;
- uVar7 = Object::getCreatureID(&local_2c);
- SaveDepotBox(uVar7,Action->Parameters[3],(Object *)&z);
- return;
- }
- }
-LAB_08076474:
- Text._252_4_ = uVar7;
- puVar4 = (undefined4 *)__cxa_allocate_exception(4,pcVar14,puVar17,pOVar16,pOVar20);
- *puVar4 = 0xffffffff;
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
- case ACTION_SENDMAIL:
- local_17c[0] = (Object)Temp->ObjectID;
- local_16c[0] = (Object)Obj2->ObjectID;
- local_15c[0] = (Object)Obj1->ObjectID;
- local_14c[0] = User->ObjectID;
- GetEventObject();
- local_2c.ObjectID = local_18c[0].ObjectID;
- z = local_18c[0].ObjectID;
- SendMail((Object *)&z);
- break;
- case ACTION_NOP:
- break;
- default:
- pcVar14 = "ExecuteAction: Unbekannte Aktion %d.\n";
- AVar15 = Action->Action;
-switchD_080755eb_default:
- error(pcVar14,AVar15);
- }
- return;
-}
-
-
-
-bool HandleEvent(EventType Event,Object *User,Object *Obj1,Object *Obj2)
-
-{
- bool bVar1;
- bool bVar2;
- TMoveUseCondition *Condition;
- TMoveUseRule *pTVar3;
- TMoveUseCondition *Condition_00;
- TMoveUseAction *Action;
- int condition;
- int iVar4;
- int iVar5;
- TMoveUseRule *Rule;
- TMoveUseDatabase *DB;
- int iStack_60;
- bool fulfilled;
- int rule;
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- Object Temp;
-
- if (HandleEvent::RecursionDepth < 0xb) {
- iStack_60 = 1;
- HandleEvent::RecursionDepth = HandleEvent::RecursionDepth + 1;
- if (0 < MoveUseDatabases[Event].NumberOfRules) {
- do {
- pTVar3 = vector<>::operator()(&MoveUseDatabases[Event].Rules,iStack_60);
- bVar1 = true;
- local_2c.ObjectID = NONE.ObjectID;
- iVar4 = pTVar3->FirstCondition;
- if (iVar4 <= pTVar3->LastCondition) {
- do {
- Condition_00 = vector<>::operator()(&MoveUseConditions,iVar4);
- local_3c[0] = (Object)Obj2->ObjectID;
- local_4c[0] = (Object)Obj1->ObjectID;
- rule = User->ObjectID;
- bVar2 = CheckCondition(Event,Condition_00,(Object *)&rule,local_4c,local_3c,
- &local_2c);
- if (!bVar2) {
- bVar1 = false;
- }
- iVar4 = iVar4 + 1;
- if (!bVar1) goto LAB_08077f6d;
- } while (iVar4 <= pTVar3->LastCondition);
- }
- if (bVar1) {
- iVar4 = pTVar3->FirstAction;
- if (pTVar3->FirstAction <= pTVar3->LastAction) {
- do {
- iVar5 = iVar4 + 1;
- Action = vector<>::operator()(&MoveUseActions,iVar4);
- rule = Obj2->ObjectID;
- local_4c[0] = (Object)Obj1->ObjectID;
- local_3c[0] = (Object)User->ObjectID;
- ExecuteAction(Event,Action,local_3c,local_4c,(Object *)&rule,&local_2c);
- iVar4 = iVar5;
- } while (iVar5 <= pTVar3->LastAction);
- }
- HandleEvent::RecursionDepth = HandleEvent::RecursionDepth + -1;
- return true;
- }
-LAB_08077f6d:
- iStack_60 = iStack_60 + 1;
- } while (iStack_60 <= MoveUseDatabases[Event].NumberOfRules);
- }
- HandleEvent::RecursionDepth = HandleEvent::RecursionDepth + -1;
- }
- else {
- error("HandleEvent: Endlosschleife im Move/Use-System vermutet.\n");
- }
- return false;
-}
-
-
-
-void UseContainer(ulong CreatureID,Object *Con,uchar Window)
-
-{
- bool bVar1;
- TPlayer *this;
- undefined4 *puVar2;
- int Window_00;
- char *pcVar3;
- Object *pOVar4;
- TPlayer *pl;
- Object OStack_4c;
- uchar Window_local;
- _func_int_varargs **local_3c;
- _func_int_varargs **local_2c;
-
- // try { // try from 0807802f to 080781a2 has its CatchHandler @ 080781b0
- bVar1 = Object::exists(Con);
- if (bVar1) {
- Object::getObjectType((Object *)&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,CONTAINER);
- if (!bVar1) {
- pcVar3 = &DAT_080f8980;
- goto LAB_0807819e;
- }
- if (Window < 0x10) {
- pOVar4 = Con;
- Object::getObjectType((Object *)&local_2c);
- if (local_2c == (_func_int_varargs **)0x63) {
- puVar2 = (undefined4 *)__cxa_allocate_exception(4,pOVar4);
- *puVar2 = 0x1d;
- goto LAB_0807815a;
- }
- this = GetPlayer(CreatureID);
- if (this != (TPlayer *)0x0) {
- Window_00 = 0;
- do {
- TPlayer::GetOpenContainer((TPlayer *)&local_2c,(int)this);
- local_3c = (_func_int_varargs **)Con->ObjectID;
- if (local_2c == local_3c) {
- OStack_4c.ObjectID = NONE.ObjectID;
- TPlayer::SetOpenContainer(this,Window_00,&stack0xffffffb4);
- SendCloseContainer((this->super_TCreature).Connection,Window_00);
- return;
- }
- Window_00 = Window_00 + 1;
- } while (Window_00 < 0x10);
- OStack_4c.ObjectID = (ulong)local_3c;
- TPlayer::SetOpenContainer(this,(uint)Window,&stack0xffffffb4);
- SendContainer((this->super_TCreature).Connection,(uint)Window);
- return;
- }
- pcVar3 = "UseContainer: Spieler %d existiert nicht.\n";
- }
- else {
- CreatureID = (ulong)Window;
- pcVar3 = &DAT_080f8940;
- }
- error(pcVar3,CreatureID);
- }
- else {
- pcVar3 = &DAT_080f89c0;
-LAB_0807819e:
- error(pcVar3);
- }
- puVar2 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar2 = 0xffffffff;
-LAB_0807815a:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar2,&RESULT::typeinfo,0);
-}
-
-
-
-void UseChest(ulong CreatureID,Object *Chest)
-
-{
- bool bVar1;
- bool bVar2;
- ulong uVar3;
- int iVar4;
- TPlayer *this;
- char *pcVar5;
- int iVar6;
- int iVar7;
- char *pcVar8;
- undefined4 *puVar9;
- int Weight;
- ulong uVar10;
- undefined4 uVar11;
- undefined8 local_bc;
- int iStack_b8;
- bool invert;
- bool first;
- int pos;
- TPlayer *pl;
- int Number;
- int x;
- int y;
- int z;
- Object local_7c [4];
- Object local_6c;
- Object Obj;
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- Object Treasure;
-
- // try { // try from 080781e8 to 08078562 has its CatchHandler @ 08078948
- bVar2 = Object::exists(Chest);
- if (bVar2) {
- Object::getObjectType(&local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,CHEST);
- if (bVar2) {
- local_2c = (Object)Chest->ObjectID;
- GetObjectCoordinates(&local_2c,&Number,&x,&y);
- uVar3 = Object::getAttribute(Chest,CHESTQUESTNUMBER);
- bVar2 = false;
- if ((0 < (int)uVar3) && ((int)uVar3 < 500)) {
- bVar2 = true;
- }
- if (!bVar2) {
- error(&DAT_080f8b40,uVar3,Number,x,y);
- goto LAB_0807875e;
- }
- local_2c = (Object)Chest->ObjectID;
- iVar4 = CountObjectsInContainer(&local_2c);
- if (iVar4 != 1) {
- error(&DAT_080f8ae0,Number,x,y);
- goto LAB_0807875e;
- }
- local_3c[0] = (Object)Chest->ObjectID;
- GetFirstContainerObject(&local_2c);
- Object::getObjectType(local_3c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_3c,UNMOVE);
- if (!bVar2) {
- Object::getObjectType(local_3c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_3c,TAKE);
- if (bVar2) {
- this = GetPlayer(CreatureID);
- if (this == (TPlayer *)0x0) {
- // try { // try from 08078759 to 080787f5 has its CatchHandler @ 08078948
- error("UseChest: Spieler %d existiert nicht.\n",CreatureID);
- goto LAB_0807875e;
- }
- iVar4 = TPlayer::GetQuestValue(this,uVar3);
- if (iVar4 != 0) {
- print();
- Object::getObjectType(local_3c);
- pcVar5 = ObjectType::getName((ObjectType *)local_3c);
- SendMessage((this->super_TCreature).Connection,0x16,"The %s is empty.",
- pcVar5);
- return;
- }
- bVar2 = CheckRight(CreatureID,UNLIMITED_CAPACITY);
- if (bVar2) {
-LAB_080784f2:
- Object::getContainer(&local_6c);
- Copy(local_4c,&local_6c);
- local_2c.ObjectID = local_4c[0].ObjectID;
- local_3c[0].ObjectID = local_4c[0].ObjectID;
- Object::getObjectType(&local_6c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_6c,MOVEMENTEVENT);
- uVar11 = 1;
- uVar10 = CreatureID;
- // try { // try from 08078586 to 08078614 has its CatchHandler @ 0807880d
- GetBodyObject((ulong)&local_6c,CreatureID);
- if ((bVar2) || (local_6c.ObjectID != NONE.ObjectID)) {
- bVar1 = false;
- if (bVar2) {
- local_7c[0] = (Object)NONE.ObjectID;
- local_4c[0].ObjectID = NONE.ObjectID;
- if (local_6c.ObjectID != NONE.ObjectID) {
- Object::getObjectType(local_4c);
- uVar10 = 4;
- bVar2 = ObjectType::getFlag((ObjectType *)local_4c,CONTAINER);
- if (bVar2) {
- bVar1 = true;
- }
- }
- }
- if (!bVar1) {
- puVar9 = (undefined4 *)__cxa_allocate_exception(4,uVar10,uVar11);
- *puVar9 = 4;
- // WARNING: Subroutine does not return
- // try { // try from 08078698 to 0807873f has its CatchHandler @ 0807880d
- __cxa_throw(puVar9,&RESULT::typeinfo,0);
- }
- local_4c[0].ObjectID = NONE.ObjectID;
- local_3c[0].ObjectID = local_6c.ObjectID;
- z = local_2c.ObjectID;
- Move(CreatureID,(Object *)&z,local_3c,-1,true,local_4c);
- }
- else {
- local_4c[0].ObjectID = NONE.ObjectID;
- GetBodyContainer((ulong)local_3c,CreatureID);
- local_7c[0].ObjectID = local_2c.ObjectID;
- Move(CreatureID,local_7c,local_3c,-1,true,local_4c);
- }
- z = local_2c.ObjectID;
- // try { // try from 08078621 to 0807866d has its CatchHandler @ 08078948
- pcVar5 = GetName((Object *)&z);
- SendMessage((this->super_TCreature).Connection,0x16,"You have found %s.\n",
- pcVar5);
- TPlayer::SetQuestValue(this,uVar3,1);
- return;
- }
- local_3c[0].ObjectID = local_2c.ObjectID;
- iVar4 = GetCompleteWeight(local_3c);
- iVar6 = GetInventoryWeight(CreatureID);
- iVar7 = TSkill::Get((this->super_TCreature).super_TSkillBase.Skills[5]);
- if ((iVar4 + iVar6 <= iVar7 * 100) &&
- (bVar2 = CheckRight(CreatureID,ZERO_CAPACITY), !bVar2)) goto LAB_080784f2;
- Object::getObjectType(local_3c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_3c,CUMULATIVE);
- if (bVar2) {
- uVar3 = Object::getAttribute(&local_2c,AMOUNT);
- pcVar5 = "they are";
- if (1 < uVar3) goto LAB_0807844b;
- }
- pcVar5 = "it is";
-LAB_0807844b:
- local_3c[0].ObjectID = local_2c.ObjectID;
- pcVar8 = GetName(local_3c);
- iVar6 = (iStack_b8 >> 5) - (iVar4 >> 0x1f);
- SendMessage((this->super_TCreature).Connection,0x16,
- "You have found %s. Weighing %d.%02d oz %s too heavy.",pcVar8,iVar6,
- iVar4 + iVar6 * -100,pcVar5);
- return;
- }
- }
- pcVar5 = "UseChest: Schatz auf Position [%d,%d,%d] ist nicht nehmbar.\n";
- }
- else {
- pcVar5 = &DAT_080f8ba0;
- }
- }
- else {
- pcVar5 = &DAT_080f8be0;
- }
- error(pcVar5);
-LAB_0807875e:
- puVar9 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar9 = 0xffffffff;
- // WARNING: Subroutine does not return
- __cxa_throw(puVar9,&RESULT::typeinfo,0);
-}
-
-
-
-void UseLiquidContainer(ulong CreatureID,Object *Obj,Object *Dest)
-
-{
- TSkill *pTVar1;
- bool bVar2;
- bool bVar3;
- ulong uVar4;
- undefined4 *puVar5;
- TPlayer *this;
- int iVar6;
- char *pcVar7;
- int iVar8;
- undefined4 uVar9;
- int LiquidType;
- int local_58;
- int x;
- int y;
- int z;
- Object local_3c [4];
- Object local_2c;
- Object Help;
-
- // try { // try from 0807897b to 08078f23 has its CatchHandler @ 08078f43
- bVar2 = Object::exists(Obj);
- if (bVar2) {
- bVar2 = Object::exists(Dest);
- if (bVar2) {
- Object::getObjectType(&local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,LIQUIDCONTAINER);
- if (!bVar2) {
- pcVar7 = &DAT_080f8ce0;
- goto LAB_08078f0b;
- }
- Object::getObjectType(&local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,LIQUIDSOURCE);
- if ((bVar2) && (uVar4 = Object::getAttribute(Obj,CONTAINERLIQUIDTYPE), uVar4 == 0)) {
- Object::getObjectType(&local_2c);
- uVar4 = ObjectType::getAttribute((ObjectType *)&local_2c,SOURCELIQUIDTYPE);
- local_2c = (Object)Obj->ObjectID;
-LAB_08078ec5:
- Change(&local_2c,CONTAINERLIQUIDTYPE,uVar4);
- return;
- }
- Object::getObjectType(&local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,LIQUIDCONTAINER);
- if ((bVar2) &&
- ((uVar4 = Object::getAttribute(Obj,CONTAINERLIQUIDTYPE), uVar4 != 0 &&
- (uVar4 = Object::getAttribute(Dest,CONTAINERLIQUIDTYPE), uVar4 == 0)))) {
- local_2c = (Object)Dest->ObjectID;
- uVar4 = Object::getAttribute(Obj,CONTAINERLIQUIDTYPE);
- Change(&local_2c,CONTAINERLIQUIDTYPE,uVar4);
- local_2c = (Object)Obj->ObjectID;
- uVar4 = 0;
- goto LAB_08078ec5;
- }
- Object::getObjectType(&local_2c);
- if (local_2c.ObjectID != 99) {
- Object::getContainer(local_3c);
- GetFirstContainerObject(&local_2c);
- z = NONE.ObjectID;
- local_3c[0].ObjectID = z;
- if (local_2c.ObjectID != NONE.ObjectID) {
- do {
- z = NONE.ObjectID;
- local_3c[0].ObjectID = NONE.ObjectID;
- Object::getObjectType((Object *)&z);
- if ((z == 99) &&
- (uVar4 = Object::getCreatureID(&local_2c), uVar4 == CreatureID)) {
- local_3c[0].ObjectID = local_2c.ObjectID;
- Dest->ObjectID = (ulong)local_2c;
- z = local_2c.ObjectID;
- break;
- }
- Object::getNextObject(local_3c);
- local_2c.ObjectID = local_3c[0].ObjectID;
- bVar2 = local_3c[0].ObjectID != NONE.ObjectID;
- local_3c[0].ObjectID = NONE.ObjectID;
- z = NONE.ObjectID;
- } while (bVar2);
- }
- }
- Object::getObjectType((Object *)&z);
- if ((z != 99) || (uVar4 = Object::getCreatureID(Dest), uVar4 != CreatureID)) {
- uVar4 = Object::getAttribute(Obj,CONTAINERLIQUIDTYPE);
- if (uVar4 == 0) {
- puVar5 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar5 = 0x1d;
- }
- else {
- z = Dest->ObjectID;
- GetObjectCoordinates((Object *)&z,&local_58,&x,&y);
- bVar2 = false;
- uVar9 = 0;
- iVar6 = x;
- iVar8 = y;
- bVar3 = CoordinateFlag();
- if (bVar3) {
- uVar9 = 0x23;
- bVar2 = CoordinateFlag();
- bVar2 = !bVar2;
- iVar6 = x;
- iVar8 = y;
- }
- if (bVar2) {
- Object::getAttribute(Obj,CONTAINERLIQUIDTYPE);
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- local_3c[0] = (Object)Dest->ObjectID;
- GetMapContainer((Object *)&z);
- GetSpecialObject((SPECIALMEANING)&local_2c);
- CreatePool();
- return;
- }
- puVar5 = (undefined4 *)__cxa_allocate_exception(4,iVar6,iVar8,uVar9);
- *puVar5 = 4;
- }
- goto LAB_08078b95;
- }
- this = GetPlayer(CreatureID);
- if (this != (TPlayer *)0x0) {
- uVar4 = Object::getAttribute(Obj,CONTAINERLIQUIDTYPE);
- switch(uVar4) {
- case 0:
- return;
- default:
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- pcVar7 = "Gulp.";
- break;
- case 2:
- case 3:
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- pTVar1 = (this->super_TCreature).super_TSkillBase.Skills[0x14];
- pcVar7 = "Aah...";
- iVar6 = (*pTVar1->_vptr_TSkill[0xd])(pTVar1);
- if (iVar6 < 5) {
- pTVar1 = (this->super_TCreature).super_TSkillBase.Skills[0x14];
- (*pTVar1->_vptr_TSkill[0xd])(pTVar1);
- TSkillBase::SetTimer(&(this->super_TCreature).super_TSkillBase);
- }
- break;
- case 6:
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- pcVar7 = "Urgh!";
- TCreature::Damage(&this->super_TCreature,(TCreature *)0x0,200,0x20);
- break;
- case 8:
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- pcVar7 = "Urgh!";
- break;
- case 10:
- case 0xb:
- z = Obj->ObjectID;
- DrinkPotion(CreatureID,(Object *)&z);
- pcVar7 = "Aaaah...";
- break;
- case 0xc:
- z = Obj->ObjectID;
- Change((Object *)&z,CONTAINERLIQUIDTYPE,0);
- pcVar7 = "Mmmh.";
- }
- Talk(CreatureID,1,(char *)0x0,pcVar7,false);
- return;
- }
- pcVar7 = "UseLiquidContainer: Spieler %d existiert nicht.\n";
- }
- else {
- Object::getObjectType(&local_2c);
- pcVar7 = &DAT_080f8d40;
- CreatureID = local_2c.ObjectID;
- }
- error(pcVar7,CreatureID);
- }
- else {
- pcVar7 = &DAT_080f8da0;
-LAB_08078f0b:
- error(pcVar7);
- }
- puVar5 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar5 = 0xffffffff;
-LAB_08078b95:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar5,&RESULT::typeinfo,0);
-}
-
-
-
-void UseFood(ulong CreatureID,Object *Obj)
-
-{
- TSkill *pTVar1;
- int iVar2;
- bool bVar3;
- TPlayer *pTVar4;
- int iVar5;
- ulong uVar6;
- undefined4 *puVar7;
- char *Text;
- TPlayer *pl;
-
- // try { // try from 08078f78 to 080790e9 has its CatchHandler @ 080790f5
- bVar3 = Object::exists(Obj);
- if (bVar3) {
- Object::getObjectType((Object *)&pl);
- bVar3 = ObjectType::getFlag((ObjectType *)&pl,FOOD);
- if (!bVar3) {
- Text = &DAT_080f8e20;
- goto LAB_080790e5;
- }
- pTVar4 = GetPlayer(CreatureID);
- if (pTVar4 != (TPlayer *)0x0) {
- pTVar1 = (pTVar4->super_TCreature).super_TSkillBase.Skills[0xe];
- iVar5 = (*pTVar1->_vptr_TSkill[0xd])(pTVar1);
- iVar2 = pTVar1->Max;
- Object::getObjectType((Object *)&pl);
- uVar6 = ObjectType::getAttribute((ObjectType *)&pl,NUTRITION);
- if (iVar5 <= (int)(iVar2 + uVar6 * -0xc)) {
- (*pTVar1->_vptr_TSkill[0xd])(pTVar1);
- Object::getObjectType((Object *)&pl);
- ObjectType::getAttribute((ObjectType *)&pl,NUTRITION);
- TSkillBase::SetTimer(&(pTVar4->super_TCreature).super_TSkillBase);
- pl = (TPlayer *)Obj->ObjectID;
- Delete((Object *)&pl,1);
- return;
- }
- puVar7 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar7 = 0x1e;
- goto LAB_080790a2;
- }
- error("UseFood: Kreatur %d existiert nicht.\n",CreatureID);
- }
- else {
- Text = &DAT_080f8e60;
-LAB_080790e5:
- error(Text);
- }
- puVar7 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar7 = 0xffffffff;
-LAB_080790a2:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar7,&RESULT::typeinfo,0);
-}
-
-
-
-void UseTextObject(ulong CreatureID,Object *Obj)
-
-{
- bool bVar1;
- TPlayer *pTVar2;
- undefined4 *puVar3;
- TPlayer *pl;
- char *Text;
- Object local_2c [7];
-
- // try { // try from 08079128 to 080791d2 has its CatchHandler @ 080791e0
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,TEXT);
- if (bVar1) {
- pTVar2 = GetPlayer(CreatureID);
- if (pTVar2 != (TPlayer *)0x0) {
- local_2c[0] = (Object)Obj->ObjectID;
- SendEditText((pTVar2->super_TCreature).Connection,local_2c);
- return;
- }
- error("UseTextObject: Kreatur %d existiert nicht.\n",CreatureID);
- goto LAB_0807919d;
- }
- Text = &DAT_080f8ee0;
- }
- else {
- Text = &DAT_080f8f20;
- }
- error(Text);
-LAB_0807919d:
- puVar3 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar3 = 0xffffffff;
- // WARNING: Subroutine does not return
- __cxa_throw(puVar3,&RESULT::typeinfo,0);
-}
-
-
-
-void UseAnnouncer(ulong CreatureID,Object *Obj)
-
-{
- bool bVar1;
- TPlayer *this;
- ulong uVar2;
- int iVar3;
- undefined4 *puVar4;
- char cVar5;
- char *Text;
- TPlayer *pl;
- int Hour;
- int Minute;
- int Year;
- int Cycle;
- int Day;
- char Help [200];
- Object local_2c [7];
-
- // try { // try from 0807921b to 080795fa has its CatchHandler @ 08079606
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,INFORMATION);
- if (bVar1) {
- this = GetPlayer(CreatureID);
- if (this != (TPlayer *)0x0) {
- Object::getObjectType(local_2c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_2c,INFORMATIONTYPE);
- if (uVar2 == 2) {
- GetTime((int *)&pl,&Hour);
- SendMessage((this->super_TCreature).Connection,0x16,"The time is %d:%.2d.",pl,
- Hour);
- return;
- }
- if (uVar2 < 3) {
- if (uVar2 == 1) {
- GetDate(&Minute,&Year,&Cycle);
- GetTime((int *)&pl,&Hour);
- SendMessage((this->super_TCreature).Connection,0x16,
- "It is the %dth day of the %dth cycle in the year %d. The time is %d:%.2d."
- ,Cycle,Year,Minute,pl,Hour);
- return;
- }
- }
- else {
- if (uVar2 == 3) {
- Day = 0x65636552;
- builtin_strncpy(Help,"ived blessings:",0x10);
- iVar3 = TPlayer::GetQuestValue(this,0x65);
- cVar5 = iVar3 != 0;
- if ((bool)cVar5) {
- strcat((char *)&Day,"\nWisdom of Solitude");
- }
- iVar3 = TPlayer::GetQuestValue(this,0x66);
- if (iVar3 != 0) {
- cVar5 = cVar5 + '\x01';
- strcat((char *)&Day,"\nSpark of the Phoenix");
- }
- iVar3 = TPlayer::GetQuestValue(this,0x67);
- if (iVar3 != 0) {
- cVar5 = cVar5 + '\x01';
- strcat((char *)&Day,"\nFire of the Suns");
- }
- iVar3 = TPlayer::GetQuestValue(this,0x68);
- if (iVar3 != 0) {
- cVar5 = cVar5 + '\x01';
- strcat((char *)&Day,"\nSpiritual Shielding");
- }
- iVar3 = TPlayer::GetQuestValue(this,0x69);
- if (iVar3 != 0) {
- cVar5 = cVar5 + '\x01';
- strcat((char *)&Day,"\nEmbrace of Tibia");
- }
- if (cVar5 == '\0') {
- builtin_strncpy(Help,"lessings received.",0x13);
- Day = 0x62206f4e;
- }
- SendMessage((this->super_TCreature).Connection,0x16,"%s",&Day);
- return;
- }
- if (uVar2 == 4) {
- local_2c[0] = (Object)Obj->ObjectID;
- SendEditText((this->super_TCreature).Connection,local_2c);
- return;
- }
- }
- Object::getObjectType(local_2c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_2c,INFORMATIONTYPE);
- error(&DAT_080f8f60,uVar2);
- return;
- }
- error("UseAnnouncer: Kreatur %d existiert nicht.\n",CreatureID);
- goto LAB_080795c5;
- }
- Text = &DAT_080f9040;
- }
- else {
- Text = &DAT_080f9080;
- }
- error(Text);
-LAB_080795c5:
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0xffffffff;
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
-}
-
-
-
-void UseKeyDoor(ulong param_1,Object *Key,Object *Door)
-
-{
- bool bVar1;
- ulong uVar2;
- ulong uVar3;
- undefined4 *puVar4;
- char *Text;
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- ObjectType Target;
-
- // try { // try from 08079638 to 08079834 has its CatchHandler @ 08079850
- bVar1 = Object::exists(Key);
- if (bVar1) {
- bVar1 = Object::exists(Door);
- if (!bVar1) {
- Text = &DAT_080f9140;
- goto LAB_08079830;
- }
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,KEY);
- if (!bVar1) {
- Text = &DAT_080f9100;
- goto LAB_08079830;
- }
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,KEYDOOR);
- if (!bVar1) {
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0x1d;
- goto LAB_080797e9;
- }
- uVar2 = Object::getAttribute(Door,KEYHOLENUMBER);
- if ((uVar2 == 0) || (uVar2 = Object::getAttribute(Key,KEYNUMBER), uVar2 == 0)) {
-LAB_08079801:
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0x16;
- goto LAB_080797e9;
- }
- uVar2 = Object::getAttribute(Door,KEYHOLENUMBER);
- uVar3 = Object::getAttribute(Key,KEYNUMBER);
- if (uVar2 != uVar3) goto LAB_08079801;
- Object::getObjectType(local_3c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_3c,KEYDOORTARGET);
- ObjectType::setTypeID((ObjectType *)&local_2c,uVar2);
- ObjectType::setTypeID((ObjectType *)local_3c,0);
- if (local_2c.ObjectID != local_3c[0].ObjectID) {
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,UNPASS);
- if (bVar1) {
- local_4c[0].ObjectID = NONE.ObjectID;
- local_3c[0] = (Object)Door->ObjectID;
- ClearField(local_3c,local_4c);
- }
- ObjectType::setTypeID((ObjectType *)local_4c,local_2c.ObjectID);
- local_3c[0] = (Object)Door->ObjectID;
- Change(local_3c,(ObjectType *)local_4c,0);
- return;
- }
- Object::getObjectType(local_4c);
- error(&DAT_080f90c0,local_4c[0].ObjectID);
- }
- else {
- Text = &DAT_080f9180;
-LAB_08079830:
- error(Text);
- }
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0xffffffff;
-LAB_080797e9:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
-}
-
-
-
-void UseNameDoor(ulong CreatureID,Object *Door)
-
-{
- bool bVar1;
- ushort HouseID;
- TPlayer *pl_00;
- ulong _TypeID;
- undefined4 *puVar2;
- TPlayer *pl;
- char *Text;
- int local_58;
- int x;
- int y;
- int z;
- Object local_3c [4];
- Object local_2c;
- ObjectType Target;
-
- // try { // try from 08079885 to 08079ace has its CatchHandler @ 08079af0
- bVar1 = Object::exists(Door);
- if (bVar1) {
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,NAMEDOOR);
- if (!bVar1) {
- Text = &DAT_080f92c0;
- goto LAB_08079aca;
- }
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,TEXT);
- if (!bVar1) {
- Text = &DAT_080f9280;
- goto LAB_08079aca;
- }
- pl_00 = GetPlayer(CreatureID);
- if (pl_00 == (TPlayer *)0x0) {
- Text = "UseNameDoor: Spieler existiert nicht.\n";
- goto LAB_08079aca;
- }
- local_2c = (Object)Door->ObjectID;
- GetObjectCoordinates(&local_2c,&local_58,&x,&y);
- HouseID = GetHouseID(local_58,x,y);
- if (HouseID == 0) {
- error(&DAT_080f9200,local_58,x,y);
- }
- else {
- bVar1 = IsOwner(HouseID,pl_00);
- if ((!bVar1) && (bVar1 = CheckRight((pl_00->super_TCreature).ID,OPEN_NAMEDOORS), !bVar1)
- ) {
- local_2c = (Object)Door->ObjectID;
- bVar1 = MayOpenDoor(&local_2c,pl_00);
- if (!bVar1) {
- puVar2 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar2 = 1;
- goto LAB_08079a3a;
- }
- }
- Object::getObjectType(local_3c);
- _TypeID = ObjectType::getAttribute((ObjectType *)local_3c,NAMEDOORTARGET);
- ObjectType::setTypeID((ObjectType *)&local_2c,_TypeID);
- ObjectType::setTypeID((ObjectType *)local_3c,0);
- if (local_2c.ObjectID != local_3c[0].ObjectID) {
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,UNPASS);
- if (bVar1) {
- z = NONE.ObjectID;
- local_3c[0] = (Object)Door->ObjectID;
- ClearField(local_3c,(Object *)&z);
- }
- ObjectType::setTypeID((ObjectType *)&z,local_2c.ObjectID);
- local_3c[0] = (Object)Door->ObjectID;
- Change(local_3c,(ObjectType *)&z,0);
- return;
- }
- Object::getObjectType((Object *)&z);
- error(&DAT_080f91c0,z);
- }
- }
- else {
- Text = &DAT_080f9320;
-LAB_08079aca:
- error(Text);
- }
- puVar2 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar2 = 0xffffffff;
-LAB_08079a3a:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar2,&RESULT::typeinfo,0);
-}
-
-
-
-void UseLevelDoor(ulong CreatureID,Object *Door)
-
-{
- bool bVar1;
- bool bVar2;
- TPlayer *pTVar3;
- int iVar4;
- ulong uVar5;
- char *pcVar6;
- undefined4 *puVar7;
- TPlayer *pl;
- Object local_4c [4];
- Object local_3c;
- ObjectType Target;
- Object local_2c [7];
-
- // try { // try from 08079b28 to 08079d8b has its CatchHandler @ 08079d97
- bVar1 = Object::exists(Door);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,LEVELDOOR);
- if (!bVar1) goto LAB_08079d8e;
- Object::getContainer(local_2c);
- Object::getObjectType(&local_3c);
- if (local_3c.ObjectID != 0) goto LAB_08079d8e;
- pTVar3 = GetPlayer(CreatureID);
- if (pTVar3 == (TPlayer *)0x0) {
- pcVar6 = "UseLevelDoor: Spieler existiert nicht.\n";
- goto LAB_08079d87;
- }
- Object::getObjectType(&local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_3c,UNPASS);
- if (!bVar1) {
- puVar7 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar7 = 0x1d;
- goto LAB_08079d37;
- }
- iVar4 = TSkill::Get((pTVar3->super_TCreature).super_TSkillBase.Skills[0]);
- uVar5 = Object::getAttribute(Door,DOORLEVEL);
- if (iVar4 < (int)uVar5) {
- local_3c = (Object)Door->ObjectID;
- pcVar6 = GetInfo(&local_3c);
- SendMessage((pTVar3->super_TCreature).Connection,0x16,"%s.",pcVar6);
- return;
- }
- Object::getObjectType(local_2c);
- uVar5 = ObjectType::getAttribute((ObjectType *)local_2c,LEVELDOORTARGET);
- ObjectType::setTypeID((ObjectType *)&local_3c,uVar5);
- bVar1 = false;
- ObjectType::setTypeID((ObjectType *)local_2c,0);
- if ((local_3c.ObjectID == local_2c[0].ObjectID) ||
- (bVar2 = ObjectType::getFlag((ObjectType *)&local_3c,UNPASS), bVar2)) {
- bVar1 = true;
- }
- if (!bVar1) {
- ObjectType::setTypeID((ObjectType *)local_4c,local_3c.ObjectID);
- local_2c[0] = (Object)Door->ObjectID;
- Change(local_2c,(ObjectType *)local_4c,0);
- local_4c[0].ObjectID = NONE.ObjectID;
- Object::getContainer(local_2c);
- pl = (TPlayer *)(pTVar3->super_TCreature).CrObject.ObjectID;
- Move(0,(Object *)&pl,local_2c,-1,false,local_4c);
- return;
- }
- Object::getObjectType(local_4c);
- error(&DAT_080f9360,local_4c[0].ObjectID);
- }
- else {
-LAB_08079d8e:
- pcVar6 = &DAT_080f9400;
-LAB_08079d87:
- error(pcVar6);
- }
- puVar7 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar7 = 0xffffffff;
-LAB_08079d37:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar7,&RESULT::typeinfo,0);
-}
-
-
-
-void UseQuestDoor(ulong CreatureID,Object *Door)
-
-{
- bool bVar1;
- bool bVar2;
- TPlayer *this;
- ulong uVar3;
- ulong uVar4;
- char *pcVar5;
- undefined4 *puVar6;
- TPlayer *pl;
- Object local_4c [4];
- Object local_3c;
- ObjectType Target;
- Object local_2c [7];
-
- // try { // try from 08079dc8 to 0807a03c has its CatchHandler @ 0807a048
- bVar1 = Object::exists(Door);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,QUESTDOOR);
- if (!bVar1) goto LAB_0807a03f;
- Object::getContainer(local_2c);
- Object::getObjectType(&local_3c);
- if (local_3c.ObjectID != 0) goto LAB_0807a03f;
- this = GetPlayer(CreatureID);
- if (this == (TPlayer *)0x0) {
- pcVar5 = "UseQuestDoor: Spieler existiert nicht.\n";
- goto LAB_0807a038;
- }
- Object::getObjectType(&local_3c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_3c,UNPASS);
- if (!bVar1) {
- puVar6 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar6 = 0x1d;
- goto LAB_08079fe8;
- }
- uVar3 = Object::getAttribute(Door,DOORQUESTNUMBER);
- uVar3 = TPlayer::GetQuestValue(this,uVar3);
- uVar4 = Object::getAttribute(Door,DOORQUESTVALUE);
- if (uVar3 != uVar4) {
- local_3c = (Object)Door->ObjectID;
- pcVar5 = GetInfo(&local_3c);
- SendMessage((this->super_TCreature).Connection,0x16,"%s.",pcVar5);
- return;
- }
- Object::getObjectType(local_2c);
- uVar3 = ObjectType::getAttribute((ObjectType *)local_2c,QUESTDOORTARGET);
- ObjectType::setTypeID((ObjectType *)&local_3c,uVar3);
- bVar1 = false;
- ObjectType::setTypeID((ObjectType *)local_2c,0);
- if ((local_3c.ObjectID == local_2c[0].ObjectID) ||
- (bVar2 = ObjectType::getFlag((ObjectType *)&local_3c,UNPASS), bVar2)) {
- bVar1 = true;
- }
- if (!bVar1) {
- ObjectType::setTypeID((ObjectType *)local_4c,local_3c.ObjectID);
- local_2c[0] = (Object)Door->ObjectID;
- Change(local_2c,(ObjectType *)local_4c,0);
- local_4c[0].ObjectID = NONE.ObjectID;
- Object::getContainer(local_2c);
- pl = (TPlayer *)(this->super_TCreature).CrObject.ObjectID;
- Move(0,(Object *)&pl,local_2c,-1,false,local_4c);
- return;
- }
- Object::getObjectType(local_4c);
- error(&DAT_080f9440,local_4c[0].ObjectID);
- }
- else {
-LAB_0807a03f:
- pcVar5 = &DAT_080f94e0;
-LAB_0807a038:
- error(pcVar5);
- }
- puVar6 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar6 = 0xffffffff;
-LAB_08079fe8:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar6,&RESULT::typeinfo,0);
-}
-
-
-
-void UseWeapon(ulong CreatureID,Object *Weapon,Object *Target)
-
-{
- bool bVar1;
- TPlayer *pl;
- ulong uVar2;
- TPlayer *pTVar3;
- long lVar4;
- undefined4 *puVar5;
- char *Text;
- Object *pOVar6;
- Object local_4c [4];
- Object local_3c;
- ObjectType Dest;
- Object local_2c [7];
-
- // try { // try from 0807a078 to 0807a2c9 has its CatchHandler @ 0807a2d5
- bVar1 = Object::exists(Weapon);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,WEAPON);
- if (!bVar1) goto LAB_0807a2cc;
- Object::getObjectType(local_2c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_2c,WEAPONTYPE);
- bVar1 = false;
- if ((0 < (int)uVar2) && ((int)uVar2 < 4)) {
- bVar1 = true;
- }
- if (!bVar1) goto LAB_0807a2cc;
- bVar1 = Object::exists(Target);
- if (!bVar1) {
-LAB_0807a2be:
- Text = &DAT_080f9560;
- goto LAB_0807a2c5;
- }
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,DESTROY);
- if (!bVar1) goto LAB_0807a2be;
- pTVar3 = GetPlayer(CreatureID);
- if (pTVar3 != (TPlayer *)0x0) {
- Object::getContainer(local_2c);
- pOVar6 = local_2c;
- Object::getObjectType(&local_3c);
- if (local_3c.ObjectID == 0) {
- local_3c = (Object)Target->ObjectID;
- GraphicalEffect(&local_3c,3);
- lVar4 = random();
- if (lVar4 == 1) {
- Object::getObjectType(local_2c);
- uVar2 = ObjectType::getAttribute((ObjectType *)local_2c,DESTROYTARGET);
- ObjectType::setTypeID((ObjectType *)&local_3c,uVar2);
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (bVar1) {
- ObjectType::setTypeID((ObjectType *)local_2c,0);
- if ((local_3c.ObjectID == local_2c[0].ObjectID) ||
- (bVar1 = ObjectType::getFlag((ObjectType *)&local_3c,CONTAINER), !bVar1))
- {
- uVar2 = 0;
- }
- else {
- uVar2 = ObjectType::getAttribute((ObjectType *)&local_3c,CAPACITY);
- }
- local_4c[0] = (Object)Target->ObjectID;
- Empty(local_4c,uVar2);
- }
- ObjectType::setTypeID((ObjectType *)local_4c,local_3c.ObjectID);
- local_2c[0] = (Object)Target->ObjectID;
- Change(local_2c,(ObjectType *)local_4c,0);
- }
- return;
- }
- puVar5 = (undefined4 *)__cxa_allocate_exception(4,pOVar6);
- *puVar5 = 1;
- goto LAB_0807a27f;
- }
- error("UseWeapon: Spieler %d existiert nicht.\n",CreatureID);
- }
- else {
-LAB_0807a2cc:
- Text = &DAT_080f95c0;
-LAB_0807a2c5:
- error(Text);
- }
- puVar5 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar5 = 0xffffffff;
-LAB_0807a27f:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar5,&RESULT::typeinfo,0);
-}
-
-
-
-void UseChangeObject(ulong CreatureID,Object *Obj)
-
-{
- bool bVar1;
- bool bVar2;
- TPlayer *pl;
- TPlayer *pTVar3;
- ulong _TypeID;
- undefined4 *puVar4;
- Object *this;
- Object *Exclude;
- int local_88;
- int x;
- int y;
- int z;
- Object local_6c [4];
- Object local_5c [4];
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- ObjectType NewType;
-
- // try { // try from 0807a30b to 0807a849 has its CatchHandler @ 0807a850
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,CHANGEUSE);
- if (bVar1) {
- pTVar3 = GetPlayer(CreatureID);
- if (pTVar3 != (TPlayer *)0x0) {
- Object::getObjectType(local_3c);
- _TypeID = ObjectType::getAttribute((ObjectType *)local_3c,CHANGETARGET);
- ObjectType::setTypeID((ObjectType *)&local_2c,_TypeID);
- bVar1 = false;
- Object::getObjectType(local_3c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_3c,UNPASS);
- if (!bVar2) {
- ObjectType::setTypeID((ObjectType *)local_3c,0);
- ObjectType::setTypeID((ObjectType *)local_4c,local_3c[0].ObjectID);
- if ((local_2c.ObjectID != local_4c[0].ObjectID) &&
- (bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,UNPASS), bVar2)) {
- bVar1 = true;
- }
- }
- if (bVar1) {
- local_5c[0] = (Object)Obj->ObjectID;
- local_4c[0].ObjectID = local_5c[0].ObjectID;
- ClearField(local_5c,local_4c);
- }
- else {
- bVar1 = false;
- Object::getObjectType(local_5c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_5c,UNLAY);
- if (!bVar2) {
- ObjectType::setTypeID((ObjectType *)local_5c,0);
- ObjectType::setTypeID((ObjectType *)local_4c,local_5c[0].ObjectID);
- if ((local_2c.ObjectID != local_4c[0].ObjectID) &&
- (bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,UNLAY), bVar2)) {
- bVar1 = true;
- }
- }
- if (bVar1) {
- local_4c[0] = (Object)Obj->ObjectID;
- GetObjectCoordinates(local_4c,&local_88,&x,&y);
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
- local_4c[0].ObjectID = NONE.ObjectID;
- GetMapContainer((int)local_6c,local_88 + 1,x);
- this = (Object *)&z;
- Object::getNextObject(this);
- Exclude = local_4c;
- }
- else {
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
- x = x + 1;
- z = NONE.ObjectID;
- }
- else {
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (bVar1) {
- z = NONE.ObjectID;
- local_88 = local_88 + -1;
- }
- else {
- bVar1 = false;
- bVar2 = CoordinateFlag();
- if (bVar2) {
- bVar1 = CoordinateFlag();
- bVar1 = !bVar1;
- }
- if (!bVar1) goto LAB_0807a3d4;
- x = x + -1;
- z = NONE.ObjectID;
- }
- }
- Exclude = (Object *)&z;
- NONE.ObjectID = z;
- GetMapContainer((int)local_6c,local_88,x);
- Object::getNextObject(local_4c);
- this = local_4c;
- }
- MoveAllObjects(this,local_6c,Exclude,true);
- }
- }
-LAB_0807a3d4:
- ObjectType::setTypeID((ObjectType *)&z,local_2c.ObjectID);
- local_6c[0] = (Object)Obj->ObjectID;
- Change(local_6c,(ObjectType *)&z,0);
- return;
- }
- error("UseChangeObject: Spieler %d existiert nicht.\n",CreatureID);
- goto LAB_0807a814;
- }
- }
- error("UseChangeObject: Objekt existiert nicht oder ist kein CHANGEUSE-Objekt.\n");
-LAB_0807a814:
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0xffffffff;
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
-}
-
-
-
-void UseObject(ulong CreatureID,Object *Obj)
-
-{
- bool bVar1;
- TCreature *cr;
- TCreature *pTVar2;
- undefined4 *puVar3;
- char *Text;
- Object local_5c [4];
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- Object User;
-
- // try { // try from 0807a888 to 0807a967 has its CatchHandler @ 0807a985
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,USEEVENT);
- if (bVar1) {
- if (CreatureID == 0) {
- pTVar2 = (TCreature *)0x0;
- }
- else {
- pTVar2 = GetCreature(CreatureID);
- }
- if (pTVar2 == (TCreature *)0x0) {
- local_2c.ObjectID = NONE.ObjectID;
- }
- else {
- local_2c.ObjectID = (pTVar2->CrObject).ObjectID;
- }
- local_3c[0] = (Object)NONE.ObjectID;
- local_4c[0] = (Object)Obj->ObjectID;
- local_5c[0].ObjectID = local_2c.ObjectID;
- bVar1 = HandleEvent(EVENT_USE,local_5c,local_4c,local_3c);
- if (bVar1) {
- return;
- }
- puVar3 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar3 = 0x1d;
- goto LAB_0807a92d;
- }
- Text = &DAT_080f96c0;
- }
- else {
- Text = &DAT_080f9700;
- }
- error(Text);
- puVar3 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar3 = 0xffffffff;
-LAB_0807a92d:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar3,&RESULT::typeinfo,0);
-}
-
-
-
-void UseObjects(ulong CreatureID,Object *Obj1,Object *Obj2)
-
-{
- bool bVar1;
- TCreature *cr;
- TCreature *pTVar2;
- undefined4 *puVar3;
- char *Text;
- Object local_5c [4];
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c;
- Object User;
-
- // try { // try from 0807a9b8 to 0807aaa7 has its CatchHandler @ 0807aad0
- bVar1 = Object::exists(Obj1);
- if (bVar1) {
- bVar1 = Object::exists(Obj2);
- if (bVar1) {
- Object::getObjectType(&local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,USEEVENT);
- if (bVar1) {
- if (CreatureID == 0) {
- pTVar2 = (TCreature *)0x0;
- }
- else {
- pTVar2 = GetCreature(CreatureID);
- }
- local_5c[0].ObjectID = NONE.ObjectID;
- if (pTVar2 != (TCreature *)0x0) {
- local_5c[0].ObjectID = (pTVar2->CrObject).ObjectID;
- }
- local_3c[0] = (Object)Obj2->ObjectID;
- local_4c[0] = (Object)Obj1->ObjectID;
- local_2c.ObjectID = local_5c[0].ObjectID;
- bVar1 = HandleEvent(EVENT_MULTIUSE,local_5c,local_4c,local_3c);
- if (bVar1) {
- return;
- }
- puVar3 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar3 = 0x1d;
- goto LAB_0807aa6d;
- }
- Text = &DAT_080f9740;
- }
- else {
- Text = &DAT_080f9780;
- }
- }
- else {
- Text = &DAT_080f97c0;
- }
- error(Text);
- puVar3 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar3 = 0xffffffff;
-LAB_0807aa6d:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar3,&RESULT::typeinfo,0);
-}
-
-
-
-void MovementEvent(Object *Obj,Object *Start,Object *Dest)
-
-{
- bool bVar1;
- undefined4 *puVar2;
- char *Text;
- Object local_4c [4];
- Object local_3c [4];
- Object local_2c [7];
-
- // try { // try from 0807ab0b to 0807aca1 has its CatchHandler @ 0807acc0
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- bVar1 = Object::exists(Start);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (!bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CHEST);
- if (!bVar1) goto LAB_0807acaa;
- }
- bVar1 = Object::exists(Dest);
- if (bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CONTAINER);
- if (!bVar1) {
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,CHEST);
- if (!bVar1) goto LAB_0807ac5d;
- }
- Object::getObjectType(local_2c);
- bVar1 = ObjectType::getFlag((ObjectType *)local_2c,MOVEMENTEVENT);
- if (!bVar1) {
- return;
- }
- local_2c[0].ObjectID = NONE.ObjectID;
- local_3c[0] = (Object)Obj->ObjectID;
- local_4c[0].ObjectID = NONE.ObjectID;
- HandleEvent(EVENT_MOVEMENT,local_4c,local_3c,local_2c);
- bVar1 = Object::exists(Obj);
- if (bVar1) {
- return;
- }
- puVar2 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar2 = 0x1f;
- goto LAB_0807ac18;
- }
-LAB_0807ac5d:
- Text = "MovementEvent: \"Dest\" ist kein Container.\n";
- }
- else {
-LAB_0807acaa:
- Text = "MovementEvent: \"Start\" ist kein Container.\n";
- }
- }
- else {
- Text = &DAT_080f9880;
- }
- error(Text);
- puVar2 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar2 = 0xffffffff;
-LAB_0807ac18:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar2,&RESULT::typeinfo,0);
-}
-
-
-
-void SeparationEvent(Object *Obj,Object *Start)
-
-{
- Object OVar1;
- bool bVar2;
- bool bVar3;
- undefined4 *puVar4;
- ulong uVar5;
- char *Text;
- Object local_6c;
- Object Obj2;
- Object local_5c;
- Object Help;
- Object local_4c;
- ObjectType Target;
- Object local_3c [4];
- Object local_2c;
- Object Obj2_1;
-
- // try { // try from 0807acfb to 0807b14b has its CatchHandler @ 0807b160
- bVar2 = Object::exists(Obj);
- if (bVar2) {
- bVar2 = Object::exists(Start);
- if (bVar2) {
- Object::getObjectType(&local_2c);
- if (local_2c.ObjectID != 0) {
- return;
- }
- Object::getObjectType(&local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_2c,SEPARATIONEVENT);
- if (bVar2) {
- local_3c[0] = (Object)Start->ObjectID;
- GetFirstContainerObject(&local_2c);
- OVar1.ObjectID = local_5c.ObjectID;
- do {
- do {
- local_5c.ObjectID = OVar1.ObjectID;
- bVar2 = false;
- local_3c[0].ObjectID = NONE.ObjectID;
- local_4c.ObjectID = NONE.ObjectID;
- if ((local_2c.ObjectID != NONE.ObjectID) &&
- (bVar3 = Object::exists(&local_2c), bVar3)) {
- bVar2 = true;
- }
- if (!bVar2) goto LAB_0807ad65;
- local_4c.ObjectID = local_2c.ObjectID;
- Object::getNextObject(&local_5c);
- local_2c.ObjectID = local_5c.ObjectID;
- local_3c[0].ObjectID = local_5c.ObjectID;
- uVar5 = Obj->ObjectID;
- OVar1.ObjectID = local_4c.ObjectID;
- } while (uVar5 == local_4c.ObjectID);
- if (uVar5 == local_5c.ObjectID) {
- Object::getNextObject(&local_6c);
- local_2c.ObjectID = local_6c.ObjectID;
- uVar5 = Obj->ObjectID;
- }
- local_6c.ObjectID = local_4c.ObjectID;
- local_3c[0].ObjectID = NONE.ObjectID;
- local_5c.ObjectID = uVar5;
- HandleEvent(EVENT_SEPARATION,local_3c,&local_5c,&local_6c);
- bVar2 = Object::exists(Obj);
- OVar1.ObjectID = local_5c.ObjectID;
- } while (bVar2);
- }
- else {
-LAB_0807ad65:
- local_5c = (Object)Start->ObjectID;
- GetFirstContainerObject(&local_6c);
- do {
- do {
- bVar2 = false;
- local_5c.ObjectID = NONE.ObjectID;
- local_4c.ObjectID = NONE.ObjectID;
- if ((local_6c.ObjectID != NONE.ObjectID) &&
- (bVar3 = Object::exists(&local_6c), bVar3)) {
- bVar2 = true;
- }
- if (!bVar2) {
- return;
- }
- local_5c.ObjectID = local_6c.ObjectID;
- Object::getNextObject(local_3c);
- local_6c.ObjectID = local_3c[0].ObjectID;
- local_4c = (Object)Obj->ObjectID;
- } while (local_5c.ObjectID == local_4c.ObjectID);
- if (local_3c[0].ObjectID == local_4c.ObjectID) {
- Object::getNextObject(&local_2c);
- local_3c[0].ObjectID = local_2c.ObjectID;
- }
- local_6c.ObjectID = local_3c[0].ObjectID;
- Object::getObjectType(&local_4c);
- if (local_4c.ObjectID == 99) {
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,LEVELDOOR);
- if (!bVar2) {
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,QUESTDOOR);
- if (!bVar2) goto LAB_0807ae44;
- }
- Object::getObjectType(local_3c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_3c,LEVELDOOR);
- Object::getObjectType(local_3c);
- uVar5 = ObjectType::getAttribute
- ((ObjectType *)local_3c,!bVar2 + LEVELDOORTARGET);
- ObjectType::setTypeID((ObjectType *)&local_4c,uVar5);
- bVar2 = false;
- ObjectType::setTypeID((ObjectType *)local_3c,0);
- if ((local_4c.ObjectID == local_3c[0].ObjectID) ||
- (bVar3 = ObjectType::getFlag((ObjectType *)&local_4c,UNPASS), !bVar3)) {
- bVar2 = true;
- }
- if (!bVar2) {
- local_3c[0] = (Object)Obj->ObjectID;
- local_2c.ObjectID = local_5c.ObjectID;
- ClearField(&local_2c,local_3c);
- ObjectType::setTypeID((ObjectType *)local_3c,local_4c.ObjectID);
- local_2c.ObjectID = local_5c.ObjectID;
- Change(&local_2c,(ObjectType *)local_3c,0);
- return;
- }
- Object::getObjectType(&local_2c);
- error(&DAT_080f98c0,local_2c.ObjectID);
- goto LAB_0807afdc;
- }
-LAB_0807ae44:
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,SEPARATIONEVENT);
- if (bVar2) {
- local_4c = (Object)Obj->ObjectID;
- local_3c[0].ObjectID = local_5c.ObjectID;
- local_2c.ObjectID = NONE.ObjectID;
- HandleEvent(EVENT_SEPARATION,&local_2c,local_3c,&local_4c);
- }
- bVar2 = Object::exists(Obj);
- } while (bVar2);
- }
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0x1f;
- goto LAB_0807ae92;
- }
- Text = &DAT_080f9920;
- }
- else {
- Text = &DAT_080f9960;
- }
- error(Text);
-LAB_0807afdc:
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0xffffffff;
-LAB_0807ae92:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
-}
-
-
-
-void CollisionEvent(Object *Obj,Object *Dest)
-
-{
- Object OVar1;
- bool bVar2;
- bool bVar3;
- undefined4 *puVar4;
- ulong uVar5;
- char *Text;
- Object *pOVar6;
- int local_9c;
- int dx_1;
- int dy_1;
- int dz_1;
- int x_1;
- int y_1;
- int z_1;
- int dx;
- int dy;
- int dz;
- int x;
- int y;
- int z;
- Object Obj2;
- Object local_5c;
- Object Help;
- Object local_4c;
- Object Obj2_1;
- Object local_3c;
- Object Help_1;
- Object local_2c [7];
-
- // try { // try from 0807b19b to 0807b86b has its CatchHandler @ 0807b890
- bVar2 = Object::exists(Obj);
- if (bVar2) {
- bVar2 = Object::exists(Dest);
- if (bVar2) {
- Object::getObjectType(local_2c);
- if (local_2c[0].ObjectID != 0) {
- return;
- }
- Object::getObjectType(local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_2c,TELEPORTABSOLUTE);
- if (bVar2) {
-LAB_0807b228:
- Object::getObjectType(local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_2c,TELEPORTABSOLUTE);
- if (bVar2) {
- Object::getAttribute(Obj,ABSTELEPORTDESTINATION);
- UnpackAbsoluteCoordinate();
- }
- else {
- local_2c[0] = (Object)Obj->ObjectID;
- GetObjectCoordinates(local_2c,&dz,&x,&y);
- Object::getObjectType(local_2c);
- ObjectType::getAttribute((ObjectType *)local_2c,RELTELEPORTDISPLACEMENT);
- UnpackRelativeCoordinate();
- dz = dz + z_1;
- x = x + dx;
- y = y + dy;
- }
- local_2c[0].ObjectID = NONE.ObjectID;
- GetMapContainer((int)&local_3c,dz,x);
- Object::getNextObject(&local_4c);
- MoveAllObjects(&local_4c,&local_3c,local_2c,true);
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,TELEPORTABSOLUTE);
- Object::getObjectType(&local_4c);
- ObjectType::getAttribute
- ((ObjectType *)&local_4c,(uint)!bVar2 * 2 + ABSTELEPORTEFFECT);
- pOVar6 = (Object *)x;
- GraphicalEffect();
- bVar2 = Object::exists(Obj);
- if (bVar2) {
- return;
- }
- }
- else {
- Object::getObjectType(local_2c);
- bVar2 = ObjectType::getFlag((ObjectType *)local_2c,TELEPORTRELATIVE);
- if (bVar2) goto LAB_0807b228;
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,COLLISIONEVENT);
- if (bVar2) {
- local_3c = (Object)Dest->ObjectID;
- GetFirstContainerObject(&local_4c);
- OVar1.ObjectID = local_5c.ObjectID;
- do {
- do {
- local_5c.ObjectID = OVar1.ObjectID;
- bVar2 = false;
- local_3c.ObjectID = NONE.ObjectID;
- local_2c[0].ObjectID = NONE.ObjectID;
- if ((local_4c.ObjectID != NONE.ObjectID) &&
- (bVar3 = Object::exists(&local_4c), bVar3)) {
- bVar2 = true;
- }
- if (!bVar2) goto LAB_0807b41e;
- local_3c.ObjectID = local_4c.ObjectID;
- Object::getNextObject(&local_5c);
- local_4c.ObjectID = local_5c.ObjectID;
- local_2c[0].ObjectID = local_5c.ObjectID;
- uVar5 = Obj->ObjectID;
- OVar1.ObjectID = local_3c.ObjectID;
- } while (uVar5 == local_3c.ObjectID);
- if (uVar5 == local_5c.ObjectID) {
- Object::getNextObject((Object *)&z);
- local_4c.ObjectID = z;
- uVar5 = Obj->ObjectID;
- }
- z = local_3c.ObjectID;
- local_2c[0].ObjectID = NONE.ObjectID;
- pOVar6 = local_2c;
- local_5c.ObjectID = uVar5;
- HandleEvent(EVENT_COLLISION,local_2c,&local_5c,(Object *)&z);
- bVar2 = Object::exists(Obj);
- OVar1.ObjectID = local_5c.ObjectID;
- } while (bVar2);
- }
- else {
-LAB_0807b41e:
- local_5c = (Object)Dest->ObjectID;
- GetFirstContainerObject((Object *)&z);
- do {
- do {
- bVar2 = false;
- local_5c.ObjectID = NONE.ObjectID;
- local_4c.ObjectID = NONE.ObjectID;
- if ((z != NONE.ObjectID) &&
- (bVar3 = Object::exists((Object *)&z), bVar3)) {
- bVar2 = true;
- }
- if (!bVar2) {
- return;
- }
- local_5c.ObjectID = z;
- Object::getNextObject(&local_3c);
- z = local_3c.ObjectID;
- local_4c = (Object)Obj->ObjectID;
- } while (local_5c.ObjectID == local_4c.ObjectID);
- if (local_3c.ObjectID == local_4c.ObjectID) {
- Object::getNextObject(local_2c);
- local_3c.ObjectID = local_2c[0].ObjectID;
- }
- z = local_3c.ObjectID;
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,TELEPORTABSOLUTE);
- if (bVar2) {
-LAB_0807b4e5:
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,TELEPORTABSOLUTE);
- if (bVar2) {
- Object::getAttribute(&local_5c,ABSTELEPORTDESTINATION);
- UnpackAbsoluteCoordinate();
- }
- else {
- local_4c.ObjectID = local_5c.ObjectID;
- GetObjectCoordinates(&local_4c,&dz_1,&x_1,&y_1);
- Object::getObjectType(&local_4c);
- ObjectType::getAttribute
- ((ObjectType *)&local_4c,RELTELEPORTDISPLACEMENT);
- UnpackRelativeCoordinate();
- dz_1 = dz_1 + local_9c;
- x_1 = x_1 + dx_1;
- y_1 = y_1 + dy_1;
- }
- local_4c = (Object)Obj->ObjectID;
- GetMapContainer((int)&local_3c,dz_1,x_1);
- MoveOneObject(&local_4c,&local_3c);
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,TELEPORTABSOLUTE);
- Object::getObjectType(&local_4c);
- ObjectType::getAttribute
- ((ObjectType *)&local_4c,(uint)!bVar2 * 2 + ABSTELEPORTEFFECT)
- ;
- pOVar6 = (Object *)x_1;
- GraphicalEffect();
- }
- else {
- Object::getObjectType(&local_4c);
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,TELEPORTRELATIVE);
- if (bVar2) goto LAB_0807b4e5;
- Object::getObjectType(&local_4c);
- pOVar6 = (Object *)0xd;
- bVar2 = ObjectType::getFlag((ObjectType *)&local_4c,COLLISIONEVENT);
- if (bVar2) {
- local_4c = (Object)Obj->ObjectID;
- local_3c.ObjectID = local_5c.ObjectID;
- local_2c[0].ObjectID = NONE.ObjectID;
- pOVar6 = local_2c;
- HandleEvent(EVENT_COLLISION,local_2c,&local_3c,&local_4c);
- }
- }
- bVar2 = Object::exists(Obj);
- } while (bVar2);
- }
- }
- puVar4 = (undefined4 *)__cxa_allocate_exception(4,pOVar6);
- *puVar4 = 0x1f;
- goto LAB_0807b364;
- }
- Text = &DAT_080f99a0;
- }
- else {
- Text = &DAT_080f99e0;
- }
- error(Text);
- puVar4 = (undefined4 *)__cxa_allocate_exception(4);
- *puVar4 = 0xffffffff;
-LAB_0807b364:
- // WARNING: Subroutine does not return
- __cxa_throw(puVar4,&RESULT::typeinfo,0);
-}
-
-
-
-// WARNING: Variable defined which should be unmapped: z
-
-void LoadParameters(TReadScriptFile *Script,int *Parameters,int NumberOfParameters,...)
-
-{
- bool bVar1;
- char cVar2;
- int iVar3;
- ulong uVar4;
- char *pcVar5;
- char *pcVar6;
- char *pcVar7;
- undefined1 uVar8;
- char *Ident;
- int local_24;
- int i;
- va_list va;
- int x;
- int y;
- int z;
-
- if (5 < NumberOfParameters) {
- error("LoadParameters: Zu viele Parameter (%d).\n",NumberOfParameters);
- TReadScriptFile::error(Script,"too many parameters");
- }
- if (NumberOfParameters != 0) {
- if ((Script->Token != SPECIAL) ||
- (cVar2 = TReadScriptFile::getSpecial(Script), cVar2 != '(')) {
- // try { // try from 0807b8eb to 0807bcc7 has its CatchHandler @ 0807bcd0
- TReadScriptFile::error(Script,"\'(\' expected");
- }
- local_24 = 0;
- i = (int)&stack0x00000010;
- if (0 < NumberOfParameters) {
- do {
- if (0 < local_24) {
- TReadScriptFile::readSymbol(Script,',');
- }
- uVar8 = *(int *)i == 0xb;
- switch(*(int *)i) {
- case 0:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = 5;
- pcVar6 = pcVar5;
- pcVar7 = "null";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar6 == *pcVar7;
- pcVar6 = pcVar6 + 1;
- pcVar7 = pcVar7 + 1;
- } while ((bool)uVar8);
- if ((bool)uVar8) {
-LAB_0807ba55:
- Parameters[local_24] = 0;
- }
- else {
- iVar3 = 5;
- pcVar6 = pcVar5;
- pcVar7 = "obj1";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar6 == *pcVar7;
- pcVar6 = pcVar6 + 1;
- pcVar7 = pcVar7 + 1;
- } while ((bool)uVar8);
- if ((bool)uVar8) {
- Parameters[local_24] = 1;
- }
- else {
- iVar3 = 5;
- pcVar6 = pcVar5;
- pcVar7 = "obj2";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar6 == *pcVar7;
- pcVar6 = pcVar6 + 1;
- pcVar7 = pcVar7 + 1;
- } while ((bool)uVar8);
- if ((bool)uVar8) {
- Parameters[local_24] = 2;
- }
- else {
- iVar3 = 5;
- pcVar6 = pcVar5;
- pcVar7 = "user";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar6 == *pcVar7;
- pcVar6 = pcVar6 + 1;
- pcVar7 = pcVar7 + 1;
- } while ((bool)uVar8);
- if ((bool)uVar8) {
- Parameters[local_24] = 3;
- }
- else {
- iVar3 = 5;
- pcVar6 = "temp";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar5 == *pcVar6;
- pcVar5 = pcVar5 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar8);
- if (!(bool)uVar8) {
- pcVar5 = "Object expected";
- goto LAB_0807ba48;
- }
- Parameters[local_24] = 4;
- }
- }
- }
- }
- break;
- case 1:
- iVar3 = TReadScriptFile::readNumber(Script);
- Parameters[local_24] = iVar3;
- bVar1 = ObjectTypeExists(iVar3);
- if (!bVar1) {
- pcVar5 = "Unknown object type";
-LAB_0807ba48:
- TReadScriptFile::error(Script,pcVar5);
- }
- break;
- case 2:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = GetFlagByName(pcVar5);
- Parameters[local_24] = iVar3;
- if (iVar3 == -1) {
- pcVar5 = "Unknown flag";
- goto LAB_0807ba48;
- }
- break;
- case 3:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = GetTypeAttributeByName(pcVar5);
- Parameters[local_24] = iVar3;
- if (iVar3 == -1) {
- pcVar5 = "Unknown type attribute";
- goto LAB_0807ba48;
- }
- break;
- case 4:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = GetInstanceAttributeByName(pcVar5);
- Parameters[local_24] = iVar3;
- if (iVar3 == -1) {
- pcVar5 = "Unknown instance attribute";
- goto LAB_0807ba48;
- }
- break;
- case 5:
- TReadScriptFile::readCoordinate(Script);
- uVar4 = PackAbsoluteCoordinate((int)va,x,y);
- goto LAB_0807bb56;
- case 6:
- TReadScriptFile::readCoordinate(Script);
- uVar4 = PackRelativeCoordinate((int)va,x,y);
- goto LAB_0807bb9a;
- case 7:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = 0x10;
- pcVar6 = pcVar5;
- pcVar7 = "premium_account";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar6 == *pcVar7;
- pcVar6 = pcVar6 + 1;
- pcVar7 = pcVar7 + 1;
- } while ((bool)uVar8);
- if ((bool)uVar8) goto LAB_0807ba55;
- iVar3 = 0x10;
- pcVar6 = "special_moveuse";
- do {
- if (iVar3 == 0) break;
- iVar3 = iVar3 + -1;
- uVar8 = *pcVar5 == *pcVar6;
- pcVar5 = pcVar5 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar8);
- if (!(bool)uVar8) {
- pcVar5 = "Unknown right";
- goto LAB_0807ba48;
- }
- Parameters[local_24] = 0x37;
- break;
- case 8:
- pcVar5 = TReadScriptFile::readIdentifier(Script);
- iVar3 = GetSkillByName(pcVar5);
- Parameters[local_24] = iVar3;
- if (iVar3 == -1) {
- pcVar5 = "Unknown skill";
- goto LAB_0807ba48;
- }
- break;
- case 9:
- uVar4 = TReadScriptFile::readNumber(Script);
-LAB_0807bb9a:
- Parameters[local_24] = uVar4;
- break;
- case 10:
- pcVar5 = TReadScriptFile::readString(Script);
- uVar4 = AddDynamicString(pcVar5);
-LAB_0807bb56:
- Parameters[local_24] = uVar4;
- break;
- case 0xb:
- cVar2 = TReadScriptFile::readSpecial(Script);
- Parameters[local_24] = (int)cVar2;
- pcVar5 = strchr("<L=G>N",(int)cVar2);
- if (pcVar5 == (char *)0x0) {
- pcVar5 = "Unknown comparison operator";
- goto LAB_0807ba48;
- }
- }
- local_24 = local_24 + 1;
- i = i + 4;
- } while (local_24 < NumberOfParameters);
- }
- TReadScriptFile::readSymbol(Script,')');
- TReadScriptFile::nextToken(Script);
- }
- return;
-}
-
-
-
-void LoadCondition(TReadScriptFile *Script,TMoveUseCondition *Condition)
-
-{
- char *pcVar1;
- int iVar2;
- char *pcVar3;
- undefined1 uVar4;
- char local_3c [4];
- char Ident [30];
-
- uVar4 = &stack0x00000000 == (undefined1 *)0x5c;
- // try { // try from 0807bd05 to 0807c4e2 has its CatchHandler @ 0807c4e8
- pcVar1 = TReadScriptFile::getIdentifier(Script);
- strcpy(local_3c,pcVar1);
- TReadScriptFile::nextToken(Script);
- iVar2 = 0xb;
- pcVar1 = local_3c;
- pcVar3 = "isposition";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISPOSITION;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "istype";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISTYPE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 0xb;
- pcVar1 = local_3c;
- pcVar3 = "iscreature";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISCREATURE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "isplayer";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISPLAYER;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "hasflag";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASFLAG;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 0x11;
- pcVar1 = local_3c;
- pcVar3 = "hastypeattribute";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASTYPEATTRIBUTE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,4);
- }
- iVar2 = 0x15;
- pcVar1 = local_3c;
- pcVar3 = "hasinstanceattribute";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASINSTANCEATTRIBUTE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,4);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "hastext";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASTEXT;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 0xb;
- pcVar1 = local_3c;
- pcVar3 = "ispeaceful";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISPEACEFUL;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "maylogout";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_MAYLOGOUT;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 0xe;
- pcVar1 = local_3c;
- pcVar3 = "hasprofession";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASPROFESSION;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "haslevel";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASLEVEL;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,3);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "hasright";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASRIGHT;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 0xe;
- pcVar1 = local_3c;
- pcVar3 = "hasquestvalue";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_HASQUESTVALUE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,4);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "testskill";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_TESTSKILL;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,4);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "countobjects";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_COUNTOBJECTS;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,3);
- }
- iVar2 = 0x12;
- pcVar1 = local_3c;
- pcVar3 = "countobjectsonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_COUNTOBJECTSONMAP;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,3);
- }
- iVar2 = 0xe;
- pcVar1 = local_3c;
- pcVar3 = "isobjectthere";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISOBJECTTHERE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 0x10;
- pcVar1 = local_3c;
- pcVar3 = "iscreaturethere";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISCREATURETHERE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 0xe;
- pcVar1 = local_3c;
- pcVar3 = "isplayerthere";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISPLAYERTHERE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 0x14;
- pcVar1 = local_3c;
- pcVar3 = "isobjectininventory";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISOBJECTININVENTORY;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,3);
- }
- iVar2 = 0x11;
- pcVar1 = local_3c;
- pcVar3 = "isprotectionzone";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISPROTECTIONZONE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "ishouse";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISHOUSE;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "ishouseowner";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISHOUSEOWNER;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,2);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "isdressed";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_ISDRESSED;
- uVar4 = Condition->Parameters == (int *)0x0;
- LoadParameters(Script,Condition->Parameters,1);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "random";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Condition->Condition = CONDITION_RANDOM;
- LoadParameters(Script,Condition->Parameters,1);
- }
- return;
-}
-
-
-
-void LoadAction(TReadScriptFile *Script,TMoveUseAction *Action)
-
-{
- char *pcVar1;
- int iVar2;
- char *pcVar3;
- undefined1 uVar4;
- char local_3c [4];
- char Ident [30];
-
- uVar4 = &stack0x00000000 == (undefined1 *)0x5c;
- // try { // try from 0807c515 to 0807d0d8 has its CatchHandler @ 0807d0e0
- pcVar1 = TReadScriptFile::getIdentifier(Script);
- strcpy(local_3c,pcVar1);
- TReadScriptFile::nextToken(Script);
- iVar2 = 0xc;
- pcVar1 = local_3c;
- pcVar3 = "createonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CREATEONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "create";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CREATE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "monsteronmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MONSTERONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "monster";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MONSTER;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 0xc;
- pcVar1 = local_3c;
- pcVar3 = "effectonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_EFFECTONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "effect";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_EFFECT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "textonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_TEXTONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 5;
- pcVar1 = local_3c;
- pcVar3 = "text";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_TEXT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0xc;
- pcVar1 = local_3c;
- pcVar3 = "changeonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CHANGEONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,4);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "change";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CHANGE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "changerel";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CHANGEREL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,5);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "setattribute";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_SETATTRIBUTE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0x10;
- pcVar1 = local_3c;
- pcVar3 = "changeattribute";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_CHANGEATTRIBUTE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0xe;
- pcVar1 = local_3c;
- pcVar3 = "setquestvalue";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_SETQUESTVALUE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "damage";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DAMAGE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,4);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "setstart";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_SETSTART;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "writename";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_WRITENAME;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "writetext";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_WRITETEXT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "logout";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_LOGOUT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,1);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "moveallonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVEALLONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "moveall";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVEALL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 0xb;
- pcVar1 = local_3c;
- pcVar3 = "moveallrel";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVEALLREL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 0xd;
- pcVar1 = local_3c;
- pcVar3 = "movetoponmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVETOPONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "movetop";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVETOP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 0xb;
- pcVar1 = local_3c;
- pcVar3 = "movetoprel";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVETOPREL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 5;
- pcVar1 = local_3c;
- pcVar3 = "move";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 8;
- pcVar1 = local_3c;
- pcVar3 = "moverel";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_MOVEREL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "retrieve";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_RETRIEVE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0xf;
- pcVar1 = local_3c;
- pcVar3 = "deleteallonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DELETEALLONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,1);
- }
- iVar2 = 0xf;
- pcVar1 = local_3c;
- pcVar3 = "deletetoponmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DELETETOPONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 0xc;
- pcVar1 = local_3c;
- pcVar3 = "deleteonmap";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DELETEONMAP;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 7;
- pcVar1 = local_3c;
- pcVar3 = "delete";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DELETE;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,1);
- }
- iVar2 = 0x12;
- pcVar1 = local_3c;
- pcVar3 = "deleteininventory";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DELETEININVENTORY;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,3);
- }
- iVar2 = 0xc;
- pcVar1 = local_3c;
- pcVar3 = "description";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_DESCRIPTION;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,2);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "loaddepot";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_LOADDEPOT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,4);
- }
- iVar2 = 10;
- pcVar1 = local_3c;
- pcVar3 = "savedepot";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_SAVEDEPOT;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,4);
- }
- iVar2 = 9;
- pcVar1 = local_3c;
- pcVar3 = "sendmail";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_SENDMAIL;
- uVar4 = Action->Parameters == (int *)0x0;
- LoadParameters(Script,Action->Parameters,1);
- }
- iVar2 = 4;
- pcVar1 = local_3c;
- pcVar3 = "nop";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar4 = *pcVar1 == *pcVar3;
- pcVar1 = pcVar1 + 1;
- pcVar3 = pcVar3 + 1;
- } while ((bool)uVar4);
- if ((bool)uVar4) {
- Action->Action = ACTION_NOP;
- LoadParameters(Script,Action->Parameters,0);
- }
- return;
-}
-
-
-
-// WARNING: Unknown calling convention -- yet parameter storage is locked
-
-void LoadDataBase(void)
-
-{
- TReadScriptFile *Script_00;
- char cVar1;
- int i;
- int iVar2;
- TMoveUseAction *Action;
- TMoveUseRule *pTVar3;
- TMoveUseCondition *Condition_00;
- int *piVar4;
- int EventType;
- int iVar5;
- TMoveUseCondition *Condition;
- char *pcVar6;
- undefined1 uVar7;
- char *pcVar8;
- char local_501c [4];
- char Ident [30];
- TReadScriptFile Script;
- undefined1 local_101c [4];
- char FileName [4096];
-
- // try { // try from 0807d121 to 0807d151 has its CatchHandler @ 0807d510
- print();
- pcVar8 = DATAPATH;
- Action = (TMoveUseAction *)local_101c;
- sprintf((char *)Action,"%s/moveuse.dat");
- TReadScriptFile::TReadScriptFile((TReadScriptFile *)(Ident + 0x1c));
- // try { // try from 0807d15f to 0807d4d5 has its CatchHandler @ 0807d4f1
- TReadScriptFile::open((TReadScriptFile *)(Ident + 0x1c),(char *)Action,(int)pcVar8);
- piVar4 = &MoveUseDatabases[0].NumberOfRules;
- iVar2 = 4;
- do {
- *piVar4 = 0;
- piVar4 = piVar4 + 0xc;
- iVar2 = iVar2 + -1;
- } while (-1 < iVar2);
-LAB_0807d183:
- TReadScriptFile::nextToken((TReadScriptFile *)(Ident + 0x1c));
- do {
- uVar7 = stack0xffffb004 == 0;
- if ((bool)uVar7) {
- TReadScriptFile::close((TReadScriptFile *)(Ident + 0x1c),(int)Action);
- pcVar8 = "Move/Use-Datenbank mit %d/%d/%d/%d/%d Regeln gelesen.\n";
- print();
- // try { // try from 0807d4df to 0807d4e3 has its CatchHandler @ 0807d510
- TReadScriptFile::~TReadScriptFile((TReadScriptFile *)(Ident + 0x1c),(int)pcVar8);
- return;
- }
- Action = (TMoveUseAction *)TReadScriptFile::getIdentifier((TReadScriptFile *)(Ident + 0x1c))
- ;
- strcpy(local_501c,(char *)Action);
- iVar2 = 6;
- pcVar8 = local_501c;
- pcVar6 = "begin";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- if ((bool)uVar7) {
- TReadScriptFile::readString((TReadScriptFile *)(Ident + 0x1c));
- goto LAB_0807d183;
- }
- iVar2 = 4;
- pcVar8 = local_501c;
- pcVar6 = "end";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- if ((bool)uVar7) goto LAB_0807d183;
- iVar2 = 4;
- pcVar8 = local_501c;
- pcVar6 = "use";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- iVar5 = -1;
- iVar2 = 9;
- if ((bool)uVar7) {
- iVar5 = 0;
- }
- pcVar8 = local_501c;
- pcVar6 = "multiuse";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- iVar2 = 9;
- if ((bool)uVar7) {
- iVar5 = 1;
- }
- pcVar8 = local_501c;
- pcVar6 = "movement";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- iVar2 = 10;
- if ((bool)uVar7) {
- iVar5 = 2;
- }
- pcVar8 = local_501c;
- pcVar6 = "collision";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- iVar2 = 0xb;
- if ((bool)uVar7) {
- iVar5 = 3;
- }
- pcVar8 = local_501c;
- pcVar6 = "separation";
- do {
- if (iVar2 == 0) break;
- iVar2 = iVar2 + -1;
- uVar7 = *pcVar8 == *pcVar6;
- pcVar8 = pcVar8 + 1;
- pcVar6 = pcVar6 + 1;
- } while ((bool)uVar7);
- if ((bool)uVar7) {
- iVar5 = 4;
- }
- if (iVar5 == -1) {
- TReadScriptFile::error((TReadScriptFile *)(Ident + 0x1c),"Unknown event type");
- }
- iVar2 = MoveUseDatabases[iVar5].NumberOfRules + 1;
- MoveUseDatabases[iVar5].NumberOfRules = iVar2;
- pTVar3 = vector<>::operator()(&MoveUseDatabases[iVar5].Rules,iVar2);
- pTVar3->FirstCondition = NumberOfMoveUseConditions + 1;
- TReadScriptFile::readSymbol((TReadScriptFile *)(Ident + 0x1c),',');
- do {
- TReadScriptFile::nextToken((TReadScriptFile *)(Ident + 0x1c));
- NumberOfMoveUseConditions = NumberOfMoveUseConditions + 1;
- Condition_00 = vector<>::operator()(&MoveUseConditions,NumberOfMoveUseConditions);
- Condition_00->Modifier = MODIFIER_NORMAL;
- if (stack0xffffb004 == 6) {
- cVar1 = TReadScriptFile::getSpecial((TReadScriptFile *)(Ident + 0x1c));
- if (cVar1 == '!') {
- Condition_00->Modifier = MODIFIER_INVERT;
- }
- else {
- if ((stack0xffffb004 != 6) ||
- (cVar1 = TReadScriptFile::getSpecial((TReadScriptFile *)(Ident + 0x1c)),
- cVar1 != '~')) goto LAB_0807d301;
- Condition_00->Modifier = MODIFIER_TRUE;
- }
- TReadScriptFile::nextToken((TReadScriptFile *)(Ident + 0x1c));
- }
-LAB_0807d301:
- LoadCondition((TReadScriptFile *)(Ident + 0x1c),Condition_00);
- if (stack0xffffb004 != 6) goto LAB_0807d33a;
- cVar1 = TReadScriptFile::getSpecial((TReadScriptFile *)(Ident + 0x1c));
- } while (cVar1 == ',');
- if ((stack0xffffb004 != 6) ||
- (cVar1 = TReadScriptFile::getSpecial((TReadScriptFile *)(Ident + 0x1c)), cVar1 != 'I')) {
-LAB_0807d33a:
- TReadScriptFile::error((TReadScriptFile *)(Ident + 0x1c),"\'->\' expected");
- }
- pTVar3->LastCondition = NumberOfMoveUseConditions;
- TReadScriptFile::nextToken((TReadScriptFile *)(Ident + 0x1c));
- pTVar3->FirstAction = NumberOfMoveUseActions + 1;
- while( true ) {
- NumberOfMoveUseActions = NumberOfMoveUseActions + 1;
- Action = vector<>::operator()(&MoveUseActions,NumberOfMoveUseActions);
- Script_00 = (TReadScriptFile *)(Ident + 0x1c);
- LoadAction(Script_00,Action);
- if ((stack0xffffb004 != 6) ||
- (cVar1 = TReadScriptFile::getSpecial(Script_00), cVar1 != ',')) break;
- TReadScriptFile::nextToken(Script_00);
- }
- if (stack0xffffb004 == 3) {
- TReadScriptFile::nextToken((TReadScriptFile *)(Ident + 0x1c));
- }
- pTVar3->LastAction = NumberOfMoveUseActions;
- } while( true );
-}
-
-
-
-// WARNING: Unknown calling convention -- yet parameter storage is locked
-
-void InitMoveUse(void)
-
-{
- NumberOfMoveUseConditions = 0;
- NumberOfMoveUseActions = 0;
- // try { // try from 0807d534 to 0807d538 has its CatchHandler @ 0807d545
- LoadDataBase();
- DelayedMails = 0;
- return;
-}
-
-
-
-// WARNING: Unknown calling convention -- yet parameter storage is locked
-
-void ExitMoveUse(void)
-
-{
- TDelayedMail *pTVar1;
- int i;
- int i_00;
- int iVar2;
-
- if ((0 < DelayedMails) && (i_00 = 0, 0 < DelayedMails)) {
- do {
- iVar2 = i_00 + 1;
- pTVar1 = vector<>::operator()(&DelayedMail,i_00);
- error("ExitMoveUse: Paket an %ld wurde nicht zugestellt.\n",pTVar1->CharacterID);
- i_00 = iVar2;
- } while (iVar2 < DelayedMails);
- }
- return;
-}
-
-
-
void __tcf_0(void *param_1)
{
|
