|
You last visited: Today at 08:00
Advertisement
[Int] Dropsystem
Discussion on [Int] Dropsystem within the Kal Online forum part of the MMORPGs category.
02/20/2013, 13:09
|
#1
|
elite*gold: 0
Join Date: Oct 2009
Posts: 26
Received Thanks: 1
|
[Int] Dropsystem
wie der titel schon sagt, es geht um das dropsystem.
kann da jemand was zu sagen, also wie die drops im mainserver errechnet werden, bzw. wie das ganze funktioniert?
|
|
|
02/20/2013, 15:36
|
#2
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
|
hier der IDA Pseudo Code sieht total bekloppt halt aus aber was besseres wird da nicht ausgespuckt.
Code:
char __thiscall CInitMonster__DropItem(void *this, int a2, int a3, int a4, int a5, int a6)
{
__int64 v6; // qax@15
__int64 v7; // qax@24
__int64 v8; // qax@29
int v9; // eax@40
unsigned __int8 v10; // al@49
int v11; // eax@49
int v12; // eax@50
int v14; // [sp+18h] [bp-40h]@12
void *v15; // [sp+1Ch] [bp-3Ch]@1
char v16; // [sp+20h] [bp-38h]@49
char v17; // [sp+24h] [bp-34h]@52
int v18; // [sp+28h] [bp-30h]@50
int v19; // [sp+2Ch] [bp-2Ch]@50
int v20; // [sp+30h] [bp-28h]@50
char v21; // [sp+34h] [bp-24h]@48
int v22; // [sp+38h] [bp-20h]@36
int v23; // [sp+3Ch] [bp-1Ch]@16
int i; // [sp+40h] [bp-18h]@8
int v25; // [sp+44h] [bp-14h]@1
int v26; // [sp+48h] [bp-10h]@1
int v27; // [sp+4Ch] [bp-Ch]@1
int v28; // [sp+50h] [bp-8h]@1
int v29; // [sp+54h] [bp-4h]@1
v15 = this;
v26 = 0;
v29 = 0;
v27 = 0;
v28 = 0;
v25 = 0;
if ( a3 )
{
v29 = CParty__FindParty(a4);
if ( v29 )
v26 = CParty__GetRandomPlayer(v29);
}
else
{
v26 = CPlayer__FindPlayer_(a4);
}
if ( v26 )
{
for ( i = 0; i < *((_DWORD *)v15 + 29); ++i )
{
v27 = 0;
if ( dword_4E1178 & 1 || dword_4E1174 & 0x100 )
v14 = 2 * *((_DWORD *)v15 + i + 24);
else
v14 = *((_DWORD *)v15 + i + 24);
v28 = v14;
if ( *((_DWORD *)v15 + 16) == 4 )
{
if ( v29 )
{
v28 += CParty__GetLuckySize(0);
}
else
{
LODWORD(v8) = Unknowns__sub_409720(33554432, 0);
if ( v8 )
++v28;
}
}
else
{
LODWORD(v6) = Unknowns__sub_409720(201326592, 0);
if ( v6 )
{
v23 = Unknowns__sub_406E10(1, 10000);
if ( v23 <= 481 )
{
if ( v23 <= 81 )
{
if ( v23 <= 21 )
{
if ( v23 <= 1 )
{
LODWORD(v7) = Unknowns__sub_409720(134217728, 0);
if ( v7 )
v27 = 4;
}
else
{
v27 = 3;
}
}
else
{
v27 = 2;
}
}
else
{
v27 = 1;
}
}
}
}
v25 = v27;
CInitMonster__DropItemEx(a2, v28, *((_DWORD *)v15 + i + 19), a3, a4, &v27, 0);
if ( a6 )
{
if ( Unknowns__sub_406E10(1, 100) > 50 )
CInitMonster__DropItemEx(a2, v28, *((_DWORD *)v15 + i + 19), a3, a4, &v27, a6);
}
if ( v27 < 0 )
{
if ( v29 )
{
v22 = CIOObject__WriteExclusive(68, "bb");
CParty__Broadcast(v22, 0);
}
else
{
CChar__Write(v26, 68, "bb");
}
}
}
ObjectRelease((void *)v26, v26 + 352);
}
v9 = (unsigned __int8)Unknowns__sub_445B60((char *)v15 + 272);
if ( !(_BYTE)v9 )
{
v26 = 0;
if ( v29 )
{
v9 = CParty__GetRandomPlayer(v29);
v26 = v9;
}
else
{
a4 = a5;
v9 = CPlayer__FindPlayer_(a5);
v26 = v9;
}
if ( v26 )
{
if ( CSMap__IsValidTile(v26 + 332, 131072) )
{
Unknowns__sub_430C20(&v21);
while ( 1 )
{
v11 = Unknowns__sub_445B40(&v16);
v10 = Unknowns__sub_47D070(v11);
if ( !v10 )
break;
v12 = Unknowns__sub_420010(&v21, v10);
v18 = *(_DWORD *)v12;
v19 = *(_DWORD *)(v12 + 4);
v20 = *(_DWORD *)(v12 + 8);
if ( CPlayer__CheckQuestFlag(v18) )
{
v27 = 0;
CInitMonster__DropItemEx(a2, v20, v19, a3, a4, &v27, 0);
}
Unknowns__sub_446060(&v17, 0);
}
}
LOBYTE(v9) = ObjectRelease((void *)v26, v26 + 352);
}
}
if ( v29 )
LOBYTE(v9) = CIOObject__Release(v29);
return v9;
}
Code:
void __stdcall CInitMonster__DropItemEx(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
int v7; // [sp+4h] [bp-28h]@7
int v8; // [sp+14h] [bp-18h]@10
int v9; // [sp+18h] [bp-14h]@10
int v10; // [sp+1Ch] [bp-10h]@10
int v11; // [sp+20h] [bp-Ch]@10
int v12; // [sp+24h] [bp-8h]@3
int i; // [sp+28h] [bp-4h]@1
for ( i = 0; i < a2; ++i )
{
v12 = CItem__CreateDropItem(a3, a7);
if ( v12 )
{
if ( (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 164))(v12) )
{
if ( *(_DWORD *)a6 > 0 )
{
if ( *(_DWORD *)a6 < 5 )
v7 = dword_4D62D8[*(_DWORD *)a6];
else
v7 = 1;
*(_DWORD *)(v12 + 52) *= v7;
*(_DWORD *)a6 = -1;
}
}
CChar__GetDropPt(&v8);
v10 = v8 >> 5;
v11 = v9 >> 5;
if ( CSMap__GetCellMap(v12, &v10) )
{
*(_DWORD *)(v12 + 80) = 1;
(*(void (__thiscall **)(int))(*(_DWORD *)v12 + 124))(v12);
}
else
{
if ( v12 )
(**(void (__thiscall ***)(_DWORD))v12)(v12);
}
}
}
}
Code:
int __cdecl CItem__CreateDropItem(int a1, int a2)
{
int v2; // eax@1
char v4; // [sp+0h] [bp-1Ch]@1
int v5; // [sp+4h] [bp-18h]@5
int v6; // [sp+8h] [bp-14h]@3
int v7; // [sp+Ch] [bp-10h]@3
int v8; // [sp+10h] [bp-Ch]@5
int v9; // [sp+14h] [bp-8h]@3
char v10; // [sp+18h] [bp-4h]@1
Unknowns__sub_47DE70(&unk_4E10D8);
Unknowns__sub_44AE20(&v10, &a1);
v2 = Unknowns__sub_430C20(&v4);
if ( (unsigned __int8)unknown_libname_8(v2) )
{
Unknowns__sub_47E080(&unk_4E10D8);
return 0;
}
v6 = 0;
v9 = 0;
v7 = 0;
Unknowns__sub_420250(&v10);
CItemGroup__GetItemInfo(&v6, &v9, &v7);
Unknowns__sub_47E080(&unk_4E10D8);
if ( v7 <= 0 )
return 0;
v8 = 0;
v5 = CItem__FindInitItem(v6);
if ( v5 )
{
if ( (a2 & *(_DWORD *)(v5 + 76)) != a2 )
return 0;
v8 = CItem__NewItem(v5);
if ( v8 )
(*(void (__thiscall **)(int))(*(_DWORD *)v8 + 76))(v8);
}
return v8;
}
Code:
char __stdcall CItemGroup__GetItemInfo(int a1, int a2, int a3)
{
int v3; // eax@2
int v4; // eax@2
int v5; // eax@3
char v7; // [sp+4h] [bp-10h]@2
char v8; // [sp+8h] [bp-Ch]@5
char v9; // [sp+Ch] [bp-8h]@1
int v10; // [sp+10h] [bp-4h]@1
v10 = Unknowns__sub_406E10(1, 1000);
Unknowns__sub_430C20(&v9);
while ( 1 )
{
v4 = Unknowns__sub_445B40(&v7);
v3 = (unsigned __int8)Unknowns__sub_47D070(v4);
if ( !(_BYTE)v3 )
break;
v5 = Unknowns__sub_430DE0(&v9);
if ( v10 <= *(_DWORD *)v5 )
{
Unknowns__sub_430DE0(&v9);
LOBYTE(v3) = CGroup__GetItemInfo(a1, a2, a3);
return v3;
}
Unknowns__sub_430E30(&v8, 0);
}
return v3;
}
Code:
void __thiscall CGroup__GetItemInfo(void *this, int a2, int a3, int a4)
{
int v4; // eax@4
int v5; // eax@5
char v6; // [sp+4h] [bp-10h]@4
char v7; // [sp+8h] [bp-Ch]@7
char v8; // [sp+Ch] [bp-8h]@3
int v9; // [sp+10h] [bp-4h]@3
if ( this )
{
v9 = Unknowns__sub_406E10(1, 1000);
Unknowns__sub_430C20(&v8);
while ( 1 )
{
v4 = Unknowns__sub_445B40(&v6);
if ( !(unsigned __int8)Unknowns__sub_47D070(v4) )
break;
v5 = Unknowns__sub_430DE0(&v8);
if ( v9 <= *(_DWORD *)v5 )
{
*(_DWORD *)a2 = *(_DWORD *)(Unknowns__sub_430DE0(&v8) + 4);
*(_DWORD *)a3 = *(_DWORD *)(Unknowns__sub_430DE0(&v8) + 8);
*(_DWORD *)a4 = *(_DWORD *)(Unknowns__sub_430DE0(&v8) + 12);
return;
}
Unknowns__sub_430E00(&v7, 0);
}
}
}
|
|
|
02/20/2013, 19:36
|
#3
|
elite*gold: 0
Join Date: Oct 2011
Posts: 189
Received Thanks: 61
|
Beim 3, 4, 5 sind es Maps oder Vectoren... Einfach testen (std::map<int,int>*) oder (std::vector<int>*) und dann sehen was rauskommt...
wenns nen vector ist, dann ist es ein pointer auf ne class/struct und bei der map könnte der erste wert nen index und der zweite der pointer sein..
|
|
|
02/20/2013, 20:04
|
#4
|
elite*gold: 0
Join Date: Oct 2009
Posts: 26
Received Thanks: 1
|
erstmal danke für eure antworten!
jedoch bringt mich das leider bei meiner frage nicht unbedingt weiter.
gibts da auch eine vereinfachte version von?
edit: gerne auch per pm, falls ihr genauere infos braucht um was es geht..
|
|
|
02/20/2013, 20:11
|
#5
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
|
was willst du denn rausfinden? Oo
|
|
|
02/20/2013, 20:18
|
#6
|
elite*gold: 0
Join Date: Oct 2009
Posts: 26
Received Thanks: 1
|
hab dir ne pm geschrieben.
|
|
|
02/23/2013, 07:58
|
#7
|
elite*gold: 0
Join Date: Jan 2011
Posts: 14
Received Thanks: 0
|
das wüsste ich auch gerne mal
|
|
|
02/23/2013, 19:09
|
#8
|
elite*gold: 0
Join Date: Oct 2009
Posts: 26
Received Thanks: 1
|
es geht darum:
ich kille mob X.
mob X dropt item X.
meine frage dazu: wie bestimmt der server wann item X gedropt wird.
|
|
|
02/23/2013, 19:14
|
#9
|
elite*gold: 0
Join Date: Jan 2009
Posts: 224
Received Thanks: 66
|
ich glaube prozentual kille mob x 200000 mal und bekomme item x
|
|
|
02/23/2013, 19:42
|
#10
|
elite*gold: 0
Join Date: Nov 2012
Posts: 367
Received Thanks: 436
|
Quote:
Originally Posted by maree
ich glaube prozentual kille mob x 200000 mal und bekomme item x
|
Ehhhhh....Ne
|
|
|
02/23/2013, 20:02
|
#11
|
elite*gold: 0
Join Date: Jan 2009
Posts: 224
Received Thanks: 66
|
dann ist alles zufall xD
|
|
|
Similar Threads
|
[DEV] neues Dropsystem
03/09/2012 - Flyff Private Server - 0 Replies
Hi Elitepvpers...
manchen dürfte aufgefallen sein, dass im Weatherordner des Koreanischen Flyff Clients eine merkwürdige .res Datei aufgetaucht ist: DropItem.res
In dieser Resdatei scheinen die neuen Dropdateien für die Monster drin zu sein, die Flyff anstatt der PropMoverEx.inc verwendet.
5 Dateien sind hier für die Drops verantwortlich:
propDropLevelPenalty.csv --> reduziert die Dropwahrscheinlichkeit aufgrund der Leveldifferenz zwischen Spieler und Monster
propDropMonsterLevel.csv...
|
All times are GMT +1. The time now is 08:03.
|
|